两个基本的Python字典问题

时间:2014-07-15 04:52:02

标签: python

问题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)

3 个答案:

答案 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

解包期间解释器中会发生什么:

  1. a变为1
  2. a变为2
  3. <强> 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