繁体   English   中英

如何根据某些自定义要求创建具有从字典分配的子列表元素的嵌套列表?

[英]How to create a nested list with sublist elements assigned from a dictionary on certain custom requirements?

我是 Python 新手,我之前曾问过类似的问题,但这仍然与此不同。 虽然冗长而复杂(我很抱歉这听起来很复杂),但我会再次感谢您的帮助,因为我一直难以让它正常工作。

考虑以下示例字典:

dict = {'*1': '*3', '*2': '*3', '*3': '+1', '*4': '*5', '*5': '+2', '*6': '+3', '+1': '+2', '+4': '+5', '+5': '0', '+3': '0', '+2': '0'}

我还有一个整数变量说: var等于4 基于这个数字,我们创建了一个嵌套的字符串列表,其中子列表的数量 = var值(在这种情况下,嵌套列表中有4个子列表)。

  1. 第 4 个子列表(本例中的最后一个子列表)将包含dict中具有值'0'那些键。 因此,子列表 4 = ['+5', '+3', '+2']

  2. 完成后,我们从dict中删除这些键值对。 因此, dict现在有以下对:

dict = {'*1': '*3', '*2': '*3', '*3': '+1', '*4': '*5', '*5': '+2', '*6': '+3', '+1': '+2', '+4': '+5'}

对于剩余的这些对,我们遍历dict (只要它是非空的)以找到其中的那些键,其对应的值在子列表 4 中。在这种情况下,这将是: '*5', '*6', '+1', '+4' 只要这些键的所有值都在子列表 4 中,我们就可以将这些键分配给之前的子列表,即 (4-1)= 子列表 3。 [但是,如果任何值不在子列表 4 中并且例如,假设它们在子列表 3 中,则相应的键将转到 (3-1)= 子列表 2。因此,在分配给任何列表之前,每次都需要执行此检查。 当一个键有多个值并且并非每个键都分配有相同的子列表时,可能会发生这种情况。]

  1. 一旦'*5', '*6', '+1', '+4'键在子列表 3 中,我们从dict中删除这些键值对。 所以dict现在有:
dict = {'*1': '*3', '*2': '*3', '*3': '+1', '*4': '*5'}
  1. 同样,我们需要选择值在子列表 3 中的那些键。对于dict中的子列表 3 元素'*5, +1' ,对应的键分别是'*4, *3' 理想情况下'*4, *3'将转到子列表 (3-1) = 子列表 2。但是,将执行检查,以确保任何现有值不在子列表 3 中而是在子列表 2 中例如,相应的键将转到子列表 (2-1)= 子列表 1。这可能发生在一个键有多个值并且不是每个键都分配有相同的子列表的情况下。 在这种情况下,当前键将被分配给(minimum of the 2 sublist numbers - 1) ,例如,sublist (2-1)= sublist 1。每次在分配之前都需要从头到尾执行此检查列表中的任何组件。 我们将重复此操作,直到 dict 为空。
Desired Output for this example would be:

[['*1', '*2'], ['*3', '*4'], ['+1', '*5', '*6', '+4'], ['+2', '+3', '+5']]

我尝试了什么:

d2 = {'*1': '*3', '*2': '*3', '*3': '+1', '*4': '*5', '*5': '+2', '*6': '+3', '+1': '+2', '+4': '+5', '+5': '0', '+3': '0', '+2': '0'}
nested_list = [['']]
var_latency = 4
last_sublist = [k for k, v in d2.items() if v == '0']
print(last_sublist) #this adds the last sublist elements from dict
for k in last_sublist:
    del d2[k]
while d2 != 0:
    for key, value in d2.items():
        if d2[value] in last_sublist:
        sublist[var_latency-1] = d2[key]
        del d2[key]
        var_latency -= 1

此代码有效:

d2 = {'*1': '*3', '*2': '*3', '*3': '+1', '*4': '*5', '*5': '+2', '*6': '+3', '+1': '+2', '+4': '+5', '+5': '0', '+3': '0', '+2': '0'}
nested_list = [[k for k, v in d2.items() if v == '0']]

var_latency = 4
for k in nested_list[0]:
    del d2[k]

while not all(x==None for x in d2.values()):
    print(d2, nested_list)
    nested_list.insert(0, [])
    for key, value in d2.items():
        if d2[key] in nested_list[1]:
            nested_list[0].append(key)
            d2[key] = None
    var_latency -= 1

print(nested_list)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM