{u'Orange': [u'OR', u'LI', u'LE'], u'Red': [u'AP', u'ST']}
{u'Orange': [u'ORANGE', u'LIME', u'LEMON'], u'Red': [u'APPLE', u'STRAWBERRY']}
从Python开始,我在使用词典方面遇到了一些困难。我在这里有这两本词典。
我想要的输出是:
Orange:
Category: Orange
OR - ORANGE
LI - LIME
LE - LEMON
Category: Red
AP - APPLE
ST - STRAWBERRY
不确定我如何匹配这两本词典。我总是可以将它们放入一个字典中并访问其他所有值,但我希望将它们保存为两个字典。永远不会有两个字母代码没有关联值的实例。订单也始终设置。
我的想法是从两者中创建第三本字典,但即便如此,我也不确定该去哪里。
答案 0 :(得分:3)
您所要做的就是迭代可用密钥,并从两个字典中检索zip
列表,以便同时迭代对。
基本实现可能如下所示:
d1 = {u'Orange': [u'OR', u'LI', u'LE'], u'Red': [u'AP', u'ST']}
d2 = {u'Orange': [u'ORANGE', u'LIME', u'LEMON'], u'Red': [u'APPLE', u'STRAWBERRY']}
for k in d1:
print("Category:", k)
for abbr, val in zip(d1[k], d2[k]):
print(abbr, "-", val)
print()
这将在文本后面的标准输出上打印:
Category: Orange
OR - ORANGE
LI - LIME
LE - LEMON
Category: Red
AP - APPLE
ST - STRAWBERRY
显然,您必须处理一些特殊情况,例如缺少字典中的键等。
答案 1 :(得分:0)
{{1}}
答案 2 :(得分:0)
试试这个:
dict1 = {u'Orange': [u'OR', u'LI', u'LE'], u'Red': [u'AP', u'ST']}
dict2 = {u'Orange': [u'ORANGE', u'LIME', u'LEMON'], u'Red': [u'APPLE', u'STRAWBERRY']}
for color in dict1.keys():
print("Category: %s" % color)
print("\n".join(" - ".join((x, y)) for x, y in zip(dict1[color], dict2[color])))
print()
我不喜欢列表理解。
答案 3 :(得分:0)
取决于你想要做什么之后可以使用字典或只是一个生成器
d1 = {u'Orange': [u'OR', u'LI', u'LE'], u'Red': [u'AP', u'ST']}
d2 = {u'Orange': [u'ORANGE', u'LIME', u'LEMON'], u'Red': [u'APPLE', u'STRAWBERRY']}
new_dict_generator = (zip(d1[k], d2[k]) for k in d1) #Generator
new_dict = {k:zip(d1[k], d2[k]) for k in d1} #Dictionary comprehension
然后你可以像
一样使用它for pairs in new_dict_generator:
print(pair)
生成器的优势在于您不需要将整个字典放在内存中,但您无法通过密钥访问它:
>>> new_dict_generator['Orange']
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: 'generator' object has no attribute '__getitem__'
>>> new_dict['Orange']
[(OR, ORANGE), (LI, LIME), (LE, LEMON)]
编辑:如果在某些时候两个列表的大小不同,您可能需要查看itertools.izip_longest