附加到 python 字典中的嵌套列表
Appending to nested list in python dictionary
我有一个以嵌套列表作为值的字典(实际上有数千个条目,这里只是一个简化)。
my_dict = {'topic a': [['CategoryA', 230], ['CategoryB', 270]], 'topic b': [['CategoryA', 198], ['CategoryB', 188]]}
我还有两个带有浮点值的列表(有序且数量与列表值相同):list_A: [0.1, 0.1], list_B: [0.2, 0.2]
我希望遍历字典和列表,每个迭代步骤将 A 的浮点值附加到字典项的第一个嵌套列表,将 B 的浮点值附加到字典项的第二个嵌套列表。订单必须保持原样。
我想要的结果如下:
{'topic a': [['CategoryA', 230, 0.1], ['CategoryB', 270, 0.2]], 'topic b': [['CategoryA', 198, 0.1], ['CategoryB', 188, 0.2]]}
我尝试了很多东西;迭代只是行不通。请查看我的其中一次尝试的代码:
my_dict = {'topic a': [['CategoryA', 230], ['CategoryB', 270]], 'topic b': [['CategoryA', 198], ['CategoryB', 188]]}
list_A = [0.1, 0.1]
list_B = [0.2, 0.2]
for element in my_dict.values():
for el in list_A:
element[0].append(el)
for el_ in list_B:
element[1].append(el_)
print(my_dict)
不希望的结果是:
{'topic a': [['CategoryA', 230, 0.1, 0.1], ['CategoryB', 270, 0.2, 0.2]], 'topic b': [['CategoryA', 198, 0.1, 0.1], ['CategoryB', 188, 0.2, 0.2]]}
我也尝试了 zip 的解决方法,但也没有成功,它在尝试将 zip 转换为列表时显示“类型错误:'list' 对象不可调用”。
test = []
for element in my_dict.values():
test = zip(element[0], list_A)
test = list(test)
print(test)
对于我的第一个例子,我真正理解了为什么我得到了不想要的结果却无法达到想要的结果;对于 zip 尝试,我没有看到问题。任何(pythonic)想法? - 非常感谢!
更新:
字典转换为列表,仍然无法正常工作;我错过了什么?
my_list = []
for key, value in my_dict.items():
temp = [key,value]
my_list.append(temp)
print(my_list)
# output: [['topic a', [['CategoryA', 230], ['CategoryB', 270]]], ['topic b', [['CategoryA', 198], ['CategoryB', 188]]]]
list_A = [0.1, 0.1]
list_B = [0.2, 0.2]
for element in my_list:
for el in list_A:
element[1][0].append(el)
for el_ in list_B:
element[1][1].append(el_)
print(my_list)
# output: [['topic a', [['CategoryA', 230, 0.1, 0.1], ['CategoryB', 270, 0.2, 0.2]]], ['topic b', [['CategoryA', 198, 0.1, 0.1], ['CategoryB', 188, 0.2, 0.2]]]]
test = []
for element in my_list:
test = zip(element[1][0], list_A)
test = list(test)
print(test)
# output: TypeError: 'list' object is not callable
当然,由于您的要求有无数种解释,我认为这实际上不是您想要的,但让我们从这里开始:
my_dict = {'topic a': [['CategoryA', 230], ['CategoryB', 270]],
'topic b': [['CategoryA', 198], ['CategoryB', 188]]}
list_A = [0.1, 0.1]
list_B = [0.2, 0.2]
desired = {'topic a': [['CategoryA', 230, 0.1], ['CategoryB', 270, 0.2]],
'topic b': [['CategoryA', 198, 0.1], ['CategoryB', 188, 0.2]]}
for outerlist, column in zip(my_dict.values(), zip(list_A, list_B)):
for nestedlist, floatvalue in zip(outerlist, column):
nestedlist.append(floatvalue)
assert my_dict == desired
这会起作用:
dict_keys = list(my_dict.keys())
for i in range(0, len(list_A)):
val_A = list_A[i]
val_B = list_B[i]
my_dict[dict_keys[i]][0].append(val_A)
my_dict[dict_keys[i]][1].append(val_B)
print(my_dict)
# {'topic a': [['CategoryA', 230, 0.1], ['CategoryB', 270, 0.2]], 'topic b': [['CategoryA', 198, 0.1], ['CategoryB', 188, 0.2]]}
我有一个以嵌套列表作为值的字典(实际上有数千个条目,这里只是一个简化)。
my_dict = {'topic a': [['CategoryA', 230], ['CategoryB', 270]], 'topic b': [['CategoryA', 198], ['CategoryB', 188]]}
我还有两个带有浮点值的列表(有序且数量与列表值相同):list_A: [0.1, 0.1], list_B: [0.2, 0.2]
我希望遍历字典和列表,每个迭代步骤将 A 的浮点值附加到字典项的第一个嵌套列表,将 B 的浮点值附加到字典项的第二个嵌套列表。订单必须保持原样。
我想要的结果如下:
{'topic a': [['CategoryA', 230, 0.1], ['CategoryB', 270, 0.2]], 'topic b': [['CategoryA', 198, 0.1], ['CategoryB', 188, 0.2]]}
我尝试了很多东西;迭代只是行不通。请查看我的其中一次尝试的代码:
my_dict = {'topic a': [['CategoryA', 230], ['CategoryB', 270]], 'topic b': [['CategoryA', 198], ['CategoryB', 188]]}
list_A = [0.1, 0.1]
list_B = [0.2, 0.2]
for element in my_dict.values():
for el in list_A:
element[0].append(el)
for el_ in list_B:
element[1].append(el_)
print(my_dict)
不希望的结果是:
{'topic a': [['CategoryA', 230, 0.1, 0.1], ['CategoryB', 270, 0.2, 0.2]], 'topic b': [['CategoryA', 198, 0.1, 0.1], ['CategoryB', 188, 0.2, 0.2]]}
我也尝试了 zip 的解决方法,但也没有成功,它在尝试将 zip 转换为列表时显示“类型错误:'list' 对象不可调用”。
test = []
for element in my_dict.values():
test = zip(element[0], list_A)
test = list(test)
print(test)
对于我的第一个例子,我真正理解了为什么我得到了不想要的结果却无法达到想要的结果;对于 zip 尝试,我没有看到问题。任何(pythonic)想法? - 非常感谢!
更新: 字典转换为列表,仍然无法正常工作;我错过了什么?
my_list = []
for key, value in my_dict.items():
temp = [key,value]
my_list.append(temp)
print(my_list)
# output: [['topic a', [['CategoryA', 230], ['CategoryB', 270]]], ['topic b', [['CategoryA', 198], ['CategoryB', 188]]]]
list_A = [0.1, 0.1]
list_B = [0.2, 0.2]
for element in my_list:
for el in list_A:
element[1][0].append(el)
for el_ in list_B:
element[1][1].append(el_)
print(my_list)
# output: [['topic a', [['CategoryA', 230, 0.1, 0.1], ['CategoryB', 270, 0.2, 0.2]]], ['topic b', [['CategoryA', 198, 0.1, 0.1], ['CategoryB', 188, 0.2, 0.2]]]]
test = []
for element in my_list:
test = zip(element[1][0], list_A)
test = list(test)
print(test)
# output: TypeError: 'list' object is not callable
当然,由于您的要求有无数种解释,我认为这实际上不是您想要的,但让我们从这里开始:
my_dict = {'topic a': [['CategoryA', 230], ['CategoryB', 270]],
'topic b': [['CategoryA', 198], ['CategoryB', 188]]}
list_A = [0.1, 0.1]
list_B = [0.2, 0.2]
desired = {'topic a': [['CategoryA', 230, 0.1], ['CategoryB', 270, 0.2]],
'topic b': [['CategoryA', 198, 0.1], ['CategoryB', 188, 0.2]]}
for outerlist, column in zip(my_dict.values(), zip(list_A, list_B)):
for nestedlist, floatvalue in zip(outerlist, column):
nestedlist.append(floatvalue)
assert my_dict == desired
这会起作用:
dict_keys = list(my_dict.keys())
for i in range(0, len(list_A)):
val_A = list_A[i]
val_B = list_B[i]
my_dict[dict_keys[i]][0].append(val_A)
my_dict[dict_keys[i]][1].append(val_B)
print(my_dict)
# {'topic a': [['CategoryA', 230, 0.1], ['CategoryB', 270, 0.2]], 'topic b': [['CategoryA', 198, 0.1], ['CategoryB', 188, 0.2]]}