>>> a_dict = {'a': 1, 'b': 2, 'c': 3}
>>> {value:key for key, value in a_dict.items()}
>>> {1: 'a', 2: 'b', 3: 'c'}
a_dict.items()创建一个列表。但是a_dict.items()中的值对我没有意义,因为没有定义值......
这是怎么回事?
答案 0 :(得分:4)
a_dict.keys()
是您词典中键的列表
a_dict.values()
是您词典中值的列表
a_dict.items()
是(键,值)对
{value:key for key, value in a_dict.items()}
是 dict()理解,它使用a_dict
并使用值切换其键,返回一个新的数据结构作为结果。如果你仔细观察,你会发现在结果部分我们有value:key
,但在迭代部分我们有key, value
- 它们会切换!非常棘手,非常pythonic。
如果a_dict
中没有重复值,则会导致原始字典的反转。如果存在重复项,由于新dict中的所有键必须是唯一的,因此每个重复值的映射中只有一个存活。
>>> a_dict = {'a': 1, 'b': 2, 'c': 3}
>>> b_dict = {value:key for key, value in a_dict.items()}
>>> a_dict.items()
[('a', 1), ('c', 3), ('b', 2)]
>>> b_dict.items()
[(1, 'a'), (2, 'b'), (3, 'c')]
>>> a_dict.keys()
['a', 'c', 'b']
>>> b_dict.values()
['a', 'b', 'c']
>>> a_dict.values()
[1, 3, 2]
>>> b_dict.keys()
[1, 2, 3]
# Try one with duplicates!
>>> c_dict = {'a': 1, 'b': 2, 'c': 3, 'd':2}
>>> d_dict = {value:key for key, value in c_dict.items()}
# The number 2 can only map to one value;
# the constructor seems to have encountered 'd' last
>>> c_dict.items()
[('a', 1), ('c', 3), ('b', 2), ('d', 2)]
>>> d_dict.items()
[(1, 'a'), (2, 'd'), (3, 'c')]
如果你很难理解它们是如何工作的,那么这是一个更简单的 dict()理解的例子;将它输入交互式编辑器并乱用它!
>>> e_dict = {n: str(n) * n for n in range(1, 30)}
答案 1 :(得分:1)
这里明确定义了价值:
'a':1
这意味着索引'a'的值为1,依此类推。
第二行刚创建了一个dict,使用值作为键和键作为第一个词典中的值。
答案 2 :(得分:1)
value和key只是字典实际内容的占位符。这基本上意味着对于字典中的每个键:值对,值部分将分配给值,键部分将分配给键。
价值和关键的内容:
iteration value key
1 1 'a'
2 2 'b'
3 3 'c'
答案 3 :(得分:1)
这一行:
{value:key for key, value in a_dict.items()}
被称为字典理解,类似于列表推导。 PEP 274为您提供了有关此语法的更多详细信息。
扩展的表达是:
temp_dict = dict()
for key, value in a_dict.items():
temp_dict[value] = key
print temp_dict