在区分相同的整数时遇到一些问题。
在下面(这显然是一个微不足道的情况)a、b、c 是整数。我想创建一个字典,字典,其中将包含 {a: 'foo', b: 'bar', c: 'baz'}
diction = {}
for i in (a, b, c):
j = ('foo', 'bar', 'baz')[(a, b, c).index(i)]
diction[i] = j
所有运行都非常好,直到例如 a 和 b 相同:第三行将为 a 和 b 提供索引 0,导致每种情况下的 j = 'foo'。
我知道列表可以被复制
list_a = [1, 2, 3]
list_b = list(list_a)
或
list_b = list_a[:]
那么,有什么办法可以用我的相同整数来做到这一点吗?
(我试着让一个 float ,但值保持不变,所以这不起作用。)
最佳答案
要从两个不同的可迭代对象创建字典,您可以使用以下代码:
d = dict(zip((a, b, c), ('foo', 'bar', 'baz')))
其中 zip
用于将两个可迭代对象合并到一个元组列表中,该列表可以传递给字典构造函数。
请注意,如果 a==b
,则 'foo'
将被 'bar'
覆盖,因为值已添加以相同的顺序添加到字典中,就像您使用此代码一样:
d[a] = 'foo'
d[b] = 'bar'
d[c] = 'baz'
这只是字典的标准行为,当一个新值分配给一个已知的键时,该值将被覆盖。
如果您希望将所有值保存在一个列表中,那么您可以使用 collections.defaultdict
,如下所示:
from collections import defaultdict
d = defaultdict(list)
for key, value in zip((a, b, c), ('foo', 'bar', 'baz')):
d[key].append(value)
关于python - 如何让 Python 区分相等的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8537167/