我想合并以下两个词典的内容
>>> key_dict
{
'1': 'seq',
'0': 'seq',
'2': 'seq'
}
>>> value_dict
{
'tedious; repetitive and boring': 'text',
'worldly': 'text',
'ordinary': 'text'
}
这样在最终列表中我有类似
的内容>>>final_list
[
{
'seq': 0,
'text': 'worldly'
},
{
'seq': 1,
'text': 'tedious; repetitive and boring'
},
{
'seq': 2,
'text': 'ordinary'
}
]
修改 道歉,我试过这个
>>> final_list = []
>>> temp_dict = {}
>>> for (key1, value1), (key2, value2) in zip(key_dict.items(), value_dict.items()):
... temp_dict[value1] = key1
... temp_dict[value2] = key2
... final_list.append[temp_dict]
...
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
TypeError: 'builtin_function_or_method' object is not subscriptable
>>>
关于我哪里出错的任何帮助
编辑2 :
更正后,final_list.append[temp_dict]
改为final_list.append(temp_dict)
我明白了
>>> pprint(final_list)
[{'seq': '1', 'text': 'ordinary'},
{'seq': '1', 'text': 'ordinary'},
{'seq': '1', 'text': 'ordinary'}]
>>>
有人可以解释为什么这些价值观会重演,我无法理解这一点。
答案 0 :(得分:3)
你实际上是在正确的轨道上。值正在重复,因为在每次迭代结束时不会清空temp_dict
。事实上,你甚至根本不需要temp_dict
,只需这样做:
>>> for (key1, value1), (key2, value2) in zip(key_dict.items(), value_dict.items()):
... final_list.append({value1: int(key1), value2: key2})
[{'seq': 1, 'text': 'ordinary'},
{'seq': 0, 'text': 'tedious; repetitive and boring'},
{'seq': 2, 'text': 'worldly'}]
如果订单很重要,那么你应该使用collections.OrderedDict
而不是正常的dict。
答案 1 :(得分:1)
使用问题中指定的顺序
from collections import OrderedDict
from pprint import pprint
key_dict = {
'1': 'seq',
'0': 'seq',
'2': 'seq'
}
value_dict = {
'tedious; repetitive and boring': 'text',
'worldly': 'text',
'ordinary': 'text'
}
kds = OrderedDict(sorted(kv for kv in key_dict.items()))
vds = OrderedDict(sorted((kv for kv in value_dict.items()), reverse=True))
d = [{v1: int(k1), v2: k2} for (k1, v1), (k2, v2) in zip(kds.items(), vds.items())]
pprint(d)
输出:
[{'seq': 0, 'text': 'worldly'},
{'seq': 1, 'text': 'tedious; repetitive and boring'},
{'seq': 2, 'text': 'ordinary'}]
原始代码的问题可以通过在循环中移动temp_dict
来解决
e.g。
final_list = []
for (key1, value1), (key2, value2) in zip(key_dict.items(), value_dict.items()):
temp_dict = {}
temp_dict[value1] = key1
temp_dict[value2] = key2
final_list.append(temp_dict)