Python 将列表中长度不等的值追加到字典中

Python 将列表中长度不等的值追加到字典中,python,python-3.x,list,dictionary,tuples,Python,Python 3.x,List,Dictionary,Tuples,我有一本字典,它的键是: {'A', 'B', 'C', 'D'} 以及列表值的一些示例: 1- [(33.0, 134), (54.0, 113), (21.0, 120)] 2- [(25.0, 153)] 3- [()] 我想按顺序将列表值应用于字典键。预期产出将为 在案例1-: {'A' : 33.0, 'B' : 134, 'C' : 54.0, 'D' : 113} 在案例2-: {'A' : 25.0, 'B' : 153, 'C' : NaN, 'D' : NaN} 在案

我有一本字典,它的键是:

{'A', 'B', 'C', 'D'}
以及列表值的一些示例:

1- [(33.0, 134), (54.0, 113), (21.0, 120)]
2- [(25.0, 153)]
3- [()]
我想按顺序将列表值应用于字典键。预期产出将为 在案例1-:

{'A' : 33.0,
'B' : 134,
'C' : 54.0,
'D' : 113}
在案例2-:

{'A' : 25.0,
'B' : 153,
'C' : NaN,
'D' : NaN}
在案例3-:

{'A' : NaN,
'B' : NaN,
'C' : NaN,
'D' : NaN}

我怎样才能做到这一点呢?

作为字典理解-如果您想要的是
np.NaN
,请用
'NaN'
替换它

>>> keys = ['A', 'B', 'C', 'D']

>>> l = [(33.0, 134), (54.0, 113), (21.0, 120)]
>>> dict(zip(keys,([x for sl in l for x in sl]+['NaN']*len(keys))[:len(keys)]))
{'A': 33.0, 'B': 134, 'C': 54.0, 'D': 113}

>>> l = [(25.0, 153)]
>>> dict(zip(keys,([x for sl in l for x in sl]+['NaN']*len(keys))[:len(keys)]))
{'A': 25.0, 'B': 153, 'C': 'NaN', 'D': 'NaN'}

>>> l = [(,)]
>>> dict(zip(keys,([x for sl in l for x in sl]+['NaN']*len(keys))[:len(keys)]))
{'A': 'NaN', 'B': 'NaN', 'C': 'NaN', 'D': 'NaN'}
说明:


我们使用
zip()
将大小为
n
的键列表压缩为元组的扁平列表,在末尾附加一个
n
值列表,然后切掉第一个
n
值。
dict()
构造函数接受压缩列表作为参数。

接受的答案太复杂,您可以轻松实现它:

from itertools import chain, zip_longest

keys = ('A', 'B', 'C', 'D') # use any ordered sequence

mapping = {
    1: [(33.0, 134), (54.0, 113), (21.0, 120)],
    2: [(25.0, 153)],
    3: [()]
}

print(dict(zip_longest(keys, chain.from_iterable(mapping[2]))))

嗨,我完全是初学者。所以我不懂密码。你能给我解释一下吗。这对我会有很大的帮助。@AyanChowdhury在我的答案后面有一个解释——我知道这是一个看起来有点可怕的函数——我可以更清楚地了解哪一点?