Python 如何将每个字典值插入到对应键后的列表中?

Python 如何将每个字典值插入到对应键后的列表中?,python,list,dictionary,list-comprehension,data-manipulation,Python,List,Dictionary,List Comprehension,Data Manipulation,我有一个元素列表,我想在关键元素之后插入字典值: listicle = ['a', 'b', 'c', 'd'] some_new_elements = {'b':'x', 'd':'y'} 提供以下信息: ['a', 'b', 'x', 'c', 'd', 'y'] Pythonic的方法是什么?正确的方法: 导入itertools listicle=['a','b','c','d'] 一些新的元素={'b':'x','d':'y'} new_map=([m,some_new_elemen

我有一个元素列表,我想在关键元素之后插入字典值:

listicle = ['a', 'b', 'c', 'd']
some_new_elements = {'b':'x', 'd':'y'}
提供以下信息:

['a', 'b', 'x', 'c', 'd', 'y']
Pythonic的方法是什么?

正确的方法:

导入itertools
listicle=['a','b','c','d']
一些新的元素={'b':'x','d':'y'}
new_map=([m,some_new_elements[m]]如果在某些_new_elements中有m,则在列表中有m)
打印(列表(itertools.chain.from_iterable(new_map)))
>>>['a','b','x','c','d','y']
无需理解列表即可完成此操作的简单方法:

listicle=['a','b','c','d']
一些新的元素={'b':'x','d':'y'}
输出=[]
对于列表中的x:
output.append(x)
如果(某些新元素中的x):
append(一些新的元素[x])
打印(输出)
>>>['a','b','x','c','d','y']

尝试使用
itertools.chain.from\u iterable
,它类似于
flatmap

from itertools import chain
listicle = ['a', 'b', 'c', 'd']
some_new_elements = {'b':'x', 'd':'y'}
output = list(chain.from_iterable([[x, some_new_elements[x]] if x in some_new_elements else [x] for x in listicle]))
print(output) # output:  ['a', 'b', 'x', 'c', 'd', 'y']

以下是一种理解:

>>> listicle = ['a', 'b', 'c', 'd']
>>> some_new_elements = {'b':'x', 'd':'y'}
>>> sentinel=object()
>>> [x for t in ((e, some_new_elements.get(e, sentinel)) for e in listicle) for x in t if x !=sentinel]
['a', 'b', 'x', 'c', 'd', 'y']

“平面图”列表。请参阅-它显示了带有迭代和结果列表的“正常”方法。添加和使用列表理解的方法。这两种方法在这里都起作用。两者都是“Pythic”。也就是说,考虑一个正常的“代码”的代码> [’a’,b’,'c'…] <代码> > >代码> [ [ a′] ],[ [ b′,'x' ],[ 'c'`]…< /代码>。的“平面映射”将所有映射序列连接在一起。使用两个离散的列表理解可能是一种有用的方式来开始并查看操作是否相互支持。@user2864740谢谢,我添加了更多上下文,但我还没有找到完美的答案。可以使用
([m,some_new_elements[m]]生成简单的映射,如果在某些新元素中有m,则在列表中有m)
。这会产生一系列元素,如
['a']
(不匹配)和
['b','x']
(匹配)。这个结果可以组合成一个“平面图”,或者使用类似的方法(无论如何可能更清晰)将所有包含的列表展平为一个列表。我发现你的解决方案在没有列表理解的情况下更具可读性+1两种方法都是“正确的”。答案中包含了这两个选项,这会使它更加强大。干得好