python - 两个基本的 Python 字典问题

标签 python

问题 1.)

for a,a in dict.items():
    print a

为什么上面打印值,如果我打印 a,a - 显然两个值都打印了两次。如果我输入了 a,b,我会迭代 (key,value) 对,所以我逻辑上认为我现在正在迭代 (key,key) 对,因此会打印键而不是值。很抱歉这些基本问题只是在解释器中玩弄并试图弄清楚。

问题 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 调用 - 基本上是 %(key) = (key,value)?

最佳答案

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) 结束。对 key 的引用丢失。

这等同于:

>>> a, a = 1, 2
>>> print a, a
2, 2

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

  1. a 变为 1
  2. 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 个值的元组)的两个元组,因此可以有效地满足这一点。

关于python - 两个基本的 Python 字典问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24750060/

相关文章:

python - python模块导入中的继承与类实例

python - 使用 BeautifulSoup 抓取动态加载的表格

Python:尝试/排除整个模块

python - 在 Python 中通过 multiprocessing.Pipe() 异步发送和接收

Python启动程序: Moving files

python - celery ,用倒计时调用延迟

Python - 如何从列表中提取最后一个 x 元素

python - 使用用户输入打印数学: Can't convert float to str implicitly

Python 正则表达式匹配模式没有被双引号包围

python - 首次部署时的 Djangosyncdb