从两个 yield 函数更新字典
Update dictionary from two yield functions
假设我有两个函数,都是 yield
字典:
def one_two_three():
myDict1 = {}
myList1 = range(1, 4)
for i in myList1:
myDict1['number'] = i
yield myDict1
def four_five_six():
myDict2 = {}
myList2 = range(4, 7)
for i in myList2:
myDict2['other_number'] = i
yield myDict2
有没有办法调用这两个函数并将字典更新为return这样的数据结构:
{'number': 0, 'other_number': 3}
{'number': 1, 'other_number': 4}
{'number': 2, 'other_number': 5}
是的,但作为一种更好的方法,您可以生成键的元组并对它们赋值 zip
生成器并创建具有列表理解的预期字典:
def one_two_three():
myList1 = range(0, 4)
for i in myList1:
yield 'number',i
def four_five_six():
myList2 = range(3, 6)
for i in myList2:
yield 'other_number',i
print [{i:j,k:z} for (i,j),(k,z) in zip(one_two_three(),four_five_six())]
输出:
[{'number': 0, 'other_number': 3},
{'number': 1, 'other_number': 4},
{'number': 2, 'other_number': 5}]
作为一种不使用生成器函数的更 pythonic 方式,您可以压缩范围对象并使用列表理解创建字典:
>>> [{'number':i,'other_number':j} for i,j in zip(range(0,4),range(3,6))]
[{'number': 0, 'other_number': 3},
{'number': 1, 'other_number': 4},
{'number': 2, 'other_number': 5}]
假设我有两个函数,都是 yield
字典:
def one_two_three():
myDict1 = {}
myList1 = range(1, 4)
for i in myList1:
myDict1['number'] = i
yield myDict1
def four_five_six():
myDict2 = {}
myList2 = range(4, 7)
for i in myList2:
myDict2['other_number'] = i
yield myDict2
有没有办法调用这两个函数并将字典更新为return这样的数据结构:
{'number': 0, 'other_number': 3}
{'number': 1, 'other_number': 4}
{'number': 2, 'other_number': 5}
是的,但作为一种更好的方法,您可以生成键的元组并对它们赋值 zip
生成器并创建具有列表理解的预期字典:
def one_two_three():
myList1 = range(0, 4)
for i in myList1:
yield 'number',i
def four_five_six():
myList2 = range(3, 6)
for i in myList2:
yield 'other_number',i
print [{i:j,k:z} for (i,j),(k,z) in zip(one_two_three(),four_five_six())]
输出:
[{'number': 0, 'other_number': 3},
{'number': 1, 'other_number': 4},
{'number': 2, 'other_number': 5}]
作为一种不使用生成器函数的更 pythonic 方式,您可以压缩范围对象并使用列表理解创建字典:
>>> [{'number':i,'other_number':j} for i,j in zip(range(0,4),range(3,6))]
[{'number': 0, 'other_number': 3},
{'number': 1, 'other_number': 4},
{'number': 2, 'other_number': 5}]