问题1.)
for a,a in dict.items():
print a
为什么上面打印了这个值,如果我打印了a,那么 - 显然这两个值都打印了两次。如果我输入a,b我将迭代(键,值)对,所以我逻辑上认为我现在迭代(键,键)对,因此将打印键而不是值。很抱歉只是在翻译中玩弄基本问题,并试图解决问题。
问题2。)
for key,value in dict.items():
print "%s is the key that corresponds to the value %s"%(key,value)
以上例子对我有意义,但为什么:
for key in dict.items():
print "%s is the key that corresponds to the value %s"%(key)
产生相同的结果?是因为即使我们没有将元组解压缩到for
语句中的两个单独的变量中,它也会通过(key,value)
调用在字符串格式化器中返回为key
- 基本上是{ {1}} = %(key)
?
答案 0 :(得分:4)
<强> Q1:强>
请考虑以下事项:
>>> d = {"a": 1, "b": 2, "c": 3}
>>> xs = d.items()
>>> a, a = xs[0]
>>> print a, a
1 1
这实际上是正在发生的事情。您正在将每个(key, value)
对解压缩到(a, a)
,最终有效(value, value)
。密钥的引用丢失了。
这与:
相同>>> a, a = 1, 2
>>> print a, a
2, 2
解包期间解释器中会发生什么:
a
变为1
。a
变为2
。<强> Q2:强>
请考虑以下事项:
>>> a, b = ("a", 1)
>>> print "%s=%s" % (a, b)
a, 1
>>> x = ("a", 1)
>>> print "%s=%s" % x
a, 1
两者实际上是一样的。由于您的字符串插值期望(a, b)
和x
的两个元组( 2个值的元组)有效地满足此要求。
答案 1 :(得分:0)
你是对的。 key
现在是元组(k,v)
,"..."%
期望带有参数的元组。并且((k,v))
(在".." % ((k,v))
中)并没有在元组中提供&#34;元组&#34;但只有&#34;单级&#34;元组 - 就像(1)
没有给出元组而是整数1
- 所以你有"..." % (k,v)
答案 2 :(得分:0)
d={1:2,4:5,6:7,8:8}
for a,a in d.items():
print(a,a)
在字典中,
a,a
与(key,value)
一起运行
并以(value,value)
输出:
Starts with (1,2) ends with (2,2)
Starts with (4,5) ends with (5,5)
Starts with (6,7) ends with (7,7)
Starts with (8,8) ends with (8,8)
所以实际输出:
2 2
5 5
7 7
8 8