我有两个元组列表,如:
tin = [
('a1', 'meow'),
('b1', 'woof'),
('c1', 'mooo'),
('d1', 'oink'),
]
rop = [
('b1', 'forest'),
('a1', 'home'),
('d1', 'shed'),
]
如何将它们组合成一个字典,以便结果如下:
full = [
{'a1' : {'sound': 'meow',
'place': 'home'}
{'b1' : {'sound': 'woof',
'place': 'forest'}
{'c1' : {'sound': 'mooo',
'place': None}
{'d1' : {'sound': 'oink',
'place': 'shed'}
]
我的工作方式如下:
my_dict = {}
for k, v in tin :
if not my_dict.get(k):
my_dict[k] = {}
my_dict[k]['sound'] = v
else:
my_dict[k]['sound'] = v
for k, v in rop:
if not my_dict.get(k):
my_dict[k] = {}
my_dict[k]['place'] = v
else:
my_dict[k]['place'] = v
但是非常冗长,我认为应该有更多的pythonic。
答案 0 :(得分:1)
您确定要将full
作为列表吗?如果你说它应该是一个字典,那么它应该是这样的:
{
'a1': {'place': 'home', 'sound': 'meow'},
'b1': {'place': 'forest', 'sound': 'woof'},
'c1': {'place': None, 'sound': 'mooo'},
'd1': {'place': 'shed', 'sound': 'oink'}
}
由以下代码生成:
# note: converting tin and rop to dict:
tin = dict(tin)
rop = dict(rop)
full = {}
for k in set(tin.keys()) | set(rop.keys()):
full[k] = {'sound': tin.get(k, None), 'place': rop.get(k, None)}
顺便说一下,如果你真的想要一个dicts列表,请改用:
full = []
for k in set(tin.keys()) | set(rop.keys()):
full.append({k: {'sound': tin.get(k, None), 'place': rop.get(k, None)}})
答案 1 :(得分:0)
使用简单的迭代。
<强>演示:强>
tin = [
('a1', 'meow'),
('b1', 'woof'),
('c1', 'mooo'),
('d1', 'oink'),
]
rop = [
('b1', 'forest'),
('a1', 'home'),
('d1', 'shed'),
]
rop = dict(rop) #Convert to dict for easy key-value access
d = {}
for i, v in tin:
d[i] = {'sound': v, 'place': rop.get(i, None)}
print(d)
<强>输出:强>
{'a1': {'sound': 'meow', 'place': 'home'}, 'c1': {'sound': 'mooo', 'place': None}, 'b1': {'sound': 'woof', 'place': 'forest'}, 'd1': {'sound': 'oink', 'place': 'shed'}}