作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我现在正在处理 Python 指令。我写了一段代码:
import random
categories = {1 : "Antics", 2 : "Tickets", 3: "Moviez",
4 : "Music", 5 : "Photography", 6 : "Gamez", 7 : "Bookz",
8 : "Jewelry", 9 : "Computers", 10 : "Clothes"}
items = {"Picture" : 1, "Clock" : 1, "Ticket for Mettalica concert" : 2,
"Ticket for Iron Maiden concert" : 2, "Ticket for Placebo concert" : 2,
"The pianist" : 3, "Batman" : 3, "Spider-Man" : 3,
"WoW" : 6, "Cabal" : 6, "Diablo 3" : 6, "Diablo 2" : 6,
"Thinking in Java" : 7, "Thinking in C++" : 7, "Golden ring" : 8,
"Asus" : 10, "HP" : 10, "Shoes" : 11}
for key, val in categories :
for k, v in items :
if key == v :
print(val, k)
我想创建一个第三个字典,在那里我会有这样的东西:
dictThe3rd = {"Antics" : "Picture", "Antics" : "Clock", "Tickets" : "Ticket for Mettalica concert", "Ticket" : "Ticket for Iron Maiden concert", "Ticket" : "Ticket for Placebo concert", ...}
等等。
如何做到这一点?我的代码显示:
test.py, line 14, in <module>
for key, val in categories :
TypeError: 'int' object is not iterable
最佳答案
如果你使用字典作为迭代器,它只会产生它的键,而不是键和值的元组。您将不得不使用 categories.items()
(如果您只使用 Python 2.x,则使用 categories.iteritems()
)来获取这些元组:
for key, val in categories.items() :
for k, v in items.items() :
if key == v :
print(val, k)
您可以使用字典理解来获取以类别名称作为键并将该类别中的所有项目作为值的字典:
>>> dict3 = { catname : [ item for item, itemcat in items.items() if itemcat == cat ] for cat, catname in categories.items() }
>>> dict3
{'Antics': ['Picture', 'Clock'],
'Bookz': ['Thinking in C++', 'Thinking in Java'],
'Clothes': ['Asus', 'HP'],
'Computers': [],
'Gamez': ['Diablo 3', 'Diablo 2', 'Cabal', 'WoW'],
'Jewelry': ['Golden ring'],
'Moviez': ['The pianist', 'Batman', 'Spider-Man'],
'Music': [],
'Photography': [],
'Tickets': ['Ticket for Mettalica concert',
'Ticket for Placebo concert',
'Ticket for Iron Maiden concert']}
解释:
方括号中的内部理解将列出类别为 cat
的所有项目。外部理解将遍历所有类别键和名称,将类别名称设置为新的字典键,将内部理解设置为值。
关于python - 如何从 Python 中的 2 个词典创建字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12054307/
我是一名优秀的程序员,十分优秀!