遍历列表,向字典添加值

时间:2019-11-19 07:35:18

标签: python python-3.x

我有4个字典的清单。我也有36个值的列表。我试图遍历字典列表,以列表值按升序填充每个字典,将项1作为键,将2和3作为附加值,依此类推。最终结果是4个字典,每个字典具有三个键,每个键具有两个附加值。 最终结果将是

dict1={x:(7,4),y:(7,8),z:(7:22)}
dict2={x: (111,4),y:(111,8),z:(111:22)} 
...

当前,我有以下不起作用的内容。

my_list = ['x',7,4,'y',7,8,'z',7,22,'x',111,4,'y',111,8,'z',111,22 and so on]

dict1={}
dict2={}
dict3={}
dict4={}
my_dict_list=[dict1,dict2,dict3,dict4]

for dicts in my_dict_list:
    for x in range (0,len(my_list),3):
        dicts[my_list[x]] = my_list[x+1],my_list[x+2]
        break

该代码的输出是我所有四个字典中列表的前3个项目。这样:

>>> dict_1
{'x': (7, 4)}
>>> dict_2
{'x': (7, 4)}
>>> dict_3
{'x': (7, 4)}
>>> dict_4
{'x': (7, 4)}

我认为这是我所能获得的最接近的信息,因为它实际上正在填充每本词典,以前我只设法填充了第一本词典和其他类似的错误情况。谁能帮助我或指出正确的方向?

2 个答案:

答案 0 :(得分:0)

尝试一下:

my_list = ['x',7,4,'y',7,8,'z',7,22,'x',111,4,'y',111,8,'z',111,22]

my_dict_list = []

idx = 0
current_dict = {}
while idx < len(my_list):
    key, *vals = my_list[idx : idx + 3]

    # If key repeats, starting a new current_dict, old one adding to my_dict_list
    if key in current_dict:
        my_dict_list.append(current_dict)
        current_dict = {}

    current_dict[key] = vals

    idx += 3

if current_dict:
    my_dict_list.append(current_dict)

print(my_dict_list)

在上述解决方案中,我们循环my_list一次读取3个值。而且,如果重复字典的键,则将其解释为新字典的开头,因此必须将旧字典存储在my_dict_list中。

答案 1 :(得分:0)

在python 3.8中使用itertools.islice循环的另一种方法{p}

while

此打印

[{'x':[7,4],'y':[7,8],'z':[7,22]},{'x':[111,4],'y' :[111,8],'z':[111,22]},{},{}]

如果您的元素比字典多,这将失败,这意味着如果您有27个元素,它们是三个“三元组”,并且您只有2个字典from itertools import islice my_list = ['x',7,4,'y',7,8,'z',7,22,'x',111,4,'y',111,8,'z',111,22] d1,d2,d3,d4={},{},{},{} dict_list=[d1,d2,d3,d4] # convert to iterators for islice and next to work iter_dict_list=iter(dict_list) iter_my_list=iter(my_list) # this keeps track of each dictionary, once it is three a new dictionary is # considered for appending completed=0 # get the first dictionary, will fail if my_list is empty d=next(iter_dict_list) # loop until you run out of '3-tuples' while sub_list:=tuple(islice(iter_my_list,3)): completed+=1 key,*value=sub_list d[key]=value if not completed%3: completed=0 d=next(iter_dict_list) print(dict_list) ,但反之则不然。 “三元组”的序列类似于d1,d2