假设我们有一个dict和指定的函数,它将两个参数作为输入
foo = {'key1':'value1', 'key2':'value2'}
def bar(key, value):
print key, value
是否可以为一个班轮中的每个键值对调用此函数?
我知道我可以在list / dict理解中做到这一点,但我认为这个解决方案不是pythonic,因为我不会在bar函数中返回任何内容。有没有推荐和pythonic方式来做到这一点?
使用for-loop
而不是字典的.items
方法:
for item in foo.items():
bar(*item)
*
语法将元组(例如('key1', 'value1')
)解包为函数的参数。请注意,您也可以在for循环中进行解压缩:
for k, v in foo.items():
bar(k, v)
两者都给出:
key2 value2
key1 value1
您可能会注意到它们与您定义它们的顺序的顺序不同。这只是字典的隐含功能 - 它们没有(可靠的)顺序。我说“可靠”的原因是因为它是确定性的(基于每个对象的哈希值,但依赖于它是不明智的)。
是的,你可以对你的功能进行微小的修改
foo = {'key1':'value1', 'key2':'value2'}
def bar(pair):
key, value = pair
print key, value
有了这个功能,你可以使用map
。
map(bar, foo.items())
产生:
key2 value2
key1 value1
引用PEP-20
简单比复杂更好。
保持简单,你可以做一些事情 -
def bar(key, value):
print key, value
for k, v in foo.items():
bar(k, v)
foo = {'key1':'value1', 'key2':'value2'}
def bar(key, value):
print key, value
[bar(key, value) for key,value in foo.items()]