我现在正在处理Python dicts。我写了一个代码:
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)
我想创建第三个dict,在那里我可以得到如下内容:
^{pr2}$所以继续。在
怎么做?我的代码显示:
test.py, line 14, in <module> for key, val in categories : TypeError: 'int' object is not iterable
如果使用dict作为迭代器,它将只生成它的键,而不是键和值的元组。您必须使用
categories.items()
(如果您只使用Python 2.x,则使用categories.iteritems()
)来获取这些元组:您可以使用dict comprehensions获得一个dict,其中类别名称作为键,该类别中的所有项目都作为值:
^{pr2}$说明:
方括号内的内部理解将列出类别为
cat
的所有项目。外部理解将迭代所有类别键和名称,将类别名称设置为新的dict键,将内部理解设置为值。在将代码更改为:
通过这种方式,您可以使用iteiteiterator在键/值对上进行迭代,对于大型字典,它的性能优于
items()
。在你想要的是这样的:
^{pr2}$它产生了
您应该像Stefan solution中那样使用
items()
,但是如果您想构建新字典而不是打印create list或追加到它:相关问题 更多 >
编程相关推荐