Python 从两个屈服函数更新字典

Python 从两个屈服函数更新字典,python,dictionary,generator,Python,Dictionary,Generator,假设我有两个函数,它们都生成字典: 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:

假设我有两个函数,它们都
生成
字典:

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
是否有方法调用这两个函数并更新字典以返回如下数据结构:

{'number': 0, 'other_number': 3}
{'number': 1, 'other_number': 4}
{'number': 2, 'other_number': 5}

是的,但作为一种更好的方法,您可以生成键的元组并将其值
zip
generators,并创建具有列表理解功能的预期词典:

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':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}]
输出:

[{'number': 0, 'other_number': 3},
 {'number': 1, 'other_number': 4},
 {'number': 2, 'other_number': 5}]
作为一种不使用生成器函数的更具python风格的方法,您可以压缩范围对象并使用列表创建词典:

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':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}]

最后一个示例不是单个数据结构,而是三个单独的字典。你想把那三本字典列在一个列表里,还是什么?似乎您最好只生成值(
i
),而不是字典本身,然后您可以在调用函数的代码中创建字典。