【问题标题】:Iterate through each key and it's value, of a function [duplicate]遍历函数的每个键及其值[重复]
【发布时间】:2017-11-26 07:54:13
【问题描述】:

我有一个函数正在尝试循环,目的是修改这些变量,并在它们后面加上 ", "

def create_merge(address, city, state_province, country, postal_code, contact, state):
    for key in locals().keys():
        for value in locals().values():
            print(key, value)

这......有点工作,但不是真的。虽然它为我提供了该 def 中所有值的正确读数,但它仅显示 state 的键。我明白了,因为我在第一个键中的所有值都在循环,然后才移动到第二个。

我想要的是一个会产生的循环,比如:

address 123 My Address
city 
state_province Illinois
country USA
postal_code 12345
contact McGruff
state Illinois

而这,显然只是首先列出键,然后是值。如何一次做一个键和一个值?

for key in locals().keys():
    print (key)
for value in locals().values():
    print (value)

...print (key, key.values()) 不起作用。

也没有

for key in locals().keys():
    print (key, locals().values())

我想我快要接近了,但就是无法得到它!感谢您的任何建议/建议。

最后说明:我需要以一种可以查看value 是否不为空的方式执行此操作,如果不为空,请在函数继续之前使用", " 修改值。

【问题讨论】:

  • 你能提供你试图迭代的变量吗?您是否有这样的字典,或者您是否希望通过另一个循环将变量传递给函数? location = {'address':'123 我的地址','city':无,'state_province','Illinois','country':'USA','postal_code':12345,'contact':'McGruff','state ' : '伊利诺伊州'}

标签: python-3.x


【解决方案1】:

虽然@VictorC 的for key, value in locals().items() 有效,但我发现这也有效:

for key, value in zip(locals().keys(), locals().values()):
    print (key, value)

(在此记录一下。我还在学习 python,所以我很乐意评论zip() 与循环通过items() 的区别,如果他们感到无聊)。

【讨论】:

  • 我不确定性能有何不同,但我知道locals().items() 返回的结果与zip(locals().keys(), locals().values()) 相同。我的假设是locals().items() 只需要通过locals() 迭代一次,而zip 方法需要两次迭代,一次获取键,一次获取值。
【解决方案2】:

您可以循环遍历键并使用.get 方法打印出键和键的值。

for key in locals().keys():
    print(key, locals().get(key))

或者,您可以只使用索引来获取值。

for key in locals().keys():
    print(key, locals()[key])

最后,您还可以使用.items() 的字典。 (.iteritems() 用于 Python 2.x)

for key, value in locals().items():
    print(key, value)

确保在使用这些变量之前实例化 keyvalue。否则,你会在迭代的时候改变locals()里面的项目,你会得到一个错误。

【讨论】:

  • 执行这些操作时,我得到“RuntimeError: dictionary changed size during iteration`。编辑:啊哈!你的编辑成功了,循环通过items()。:D
猜你喜欢
  • 2012-09-19
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 2020-03-21
相关资源
最近更新 更多