for k, v in d.iteritems()分别是key k和{},因此用(v, k)反转v和k使旧值成为键,旧键成为新值
In [7]: d = {1:10,2:20}
In [8]: d.items()
Out[8]: dict_items([(1, 10), (2, 20)]) # tuples of key and value
In [1]: d = {1:10,2:20}
In [2]: for k,v in d.iteritems():
print k,v
...:
1 10 # 1 is the key 10 is the value
2 20
In [3]: new_d = {v:k for k,v in d.iteritems()} # swap key for value and value for key
In [4]: new_d
Out[4]: {10: 1, 20: 2}
您可能遇到的两个问题是重复的值或不可散列的值,因此它们不能用作列表、集合等键。。。在
^{pr2}$
dict([(v, k) for k, v in d.iteritems()])将与{v:k for k,v in d.iteritems()}具有相同的输出,主要区别是前者还与python<;2.7兼容。在
for k, v in d.iteritems()
分别是key k
和{(v, k)
反转v和k使旧值成为键,旧键成为新值您可能遇到的两个问题是重复的值或不可散列的值,因此它们不能用作列表、集合等键。。。在
^{pr2}$dict([(v, k) for k, v in d.iteritems()])
将与{v:k for k,v in d.iteritems()}
具有相同的输出,主要区别是前者还与python<;2.7兼容。在如果您使用的是python<;2.7,则无需使用列表,您只需使用生成器表达式:
dict构造函数可以接收一个iterable的键/值对来创建字典,因此这段代码是说“从这个字典d中获取键/值对,并创建一个新字典,其中d的值现在是键,d的键成为值”
这就是为什么(v,k)是颠倒的,如果你没有颠倒它们,像这样
你会得到一本一模一样的字典。在
另请注意,在python 2.7及更高版本中,您实际上可以使用更紧凑的:
^{pr2}$它读起来更直观(至少对我来说),因为它看起来更像是一个列表理解,只不过它创建了一个dict
好的,所以当你在dict上调用
iteritems()
时,它会为字典中的每个项目提供一个(key, value)
元组:然后可以使用Python的 元组解包语法:
^{pr2}${把它们当作一个列表来处理
(key, value)
项:最后用Python的例子来理解 语法:
^{4}$要理解您发布的代码片段,您只需 熟悉这些Python习语。如果你没有看到任何 在这些技术中,这是一个相当密集的爆发 新的信息让你头脑清醒。在
相关问题 更多 >
编程相关推荐