Generatorexpression,获得与在forloop中使用append或extend相同的结果

2024-09-28 18:56:22 发布

您现在位置:Python中文网/ 问答频道 /正文

usingAppend = []; usingExtend = []; usingLC = []

d = {'pKey_b': 'vb1', 'pKey_e': 've1', 'pKey_c': 'vc1', 'pKey_a': 'va1', 'pKey_d': 'vd1'}

for-loop中使用append给出了带有子列表的list

for k, v in sorted(d.iteritems()):
    usingAppend.append([k, v])
print '\n', usingAppend

'''
[
 ['pKey_a', 'va1'],
 ['pKey_b', 'vb1'],
 ['pKey_c', 'vc1'],
 ['pKey_d', 'vd1'],
 ['pKey_e', 've1']
]
'''

for-loop中使用extend得到一个list

for k, v in sorted(d.iteritems()):
    usingExtend.extend((k, v))
print '\n', usingExtend

'''
['pKey_a', 'va1', 'pKey_b', 'vb1', 'pKey_c', 'vc1', 'pKey_d', 'vd1', 'pKey_e', 've1']
'''

使用这个生成器表达式得到的结果与在带有子列表的for loop、a list中使用append得到的结果相同

usingLC = sorted([k, v] for k, v in d.iteritems())
print '\n', usingLC

'''
[
 ['pKey_a', 'va1'],
 ['pKey_b', 'vb1'],
 ['pKey_c', 'vc1'],
 ['pKey_d', 'vd1'],
 ['pKey_e', 've1']
]
'''

我的问题是,有没有一种方法可以设置生成器表达式,以给出与在for循环中使用extend相同的结果


Tags: inloopforlistsortedappendpkeyvb1
1条回答
网友
1楼 · 发布于 2024-09-28 18:56:22

使用双循环:

[i for k, v in sorted(d.iteritems()) for i in (k, v)]

或者

[i for item in sorted(d.iteritems()) for i in item]

^{}

from itertools import chain

list(chain.from_iterable(item for item in sorted(d.iteritems())))

尽管你可以使用:

list(chain.from_iterable(sorted(d.iteritems())))

在这种情况下。你知道吗

演示:

>>> d = {'pKey_b': 'vb1', 'pKey_e': 've1', 'pKey_c': 'vc1', 'pKey_a': 'va1', 'pKey_d': 'vd1'}
>>> [i for k, v in sorted(d.iteritems()) for i in (k, v)]
['pKey_a', 'va1', 'pKey_b', 'vb1', 'pKey_c', 'vc1', 'pKey_d', 'vd1', 'pKey_e', 've1']
>>> from itertools import chain
>>> list(chain.from_iterable(item for item in sorted(d.iteritems())))
['pKey_a', 'va1', 'pKey_b', 'vb1', 'pKey_c', 'vc1', 'pKey_d', 'vd1', 'pKey_e', 've1']
>>> list(chain.from_iterable(sorted(d.iteritems())))
['pKey_a', 'va1', 'pKey_b', 'vb1', 'pKey_c', 'vc1', 'pKey_d', 'vd1', 'pKey_e', 've1']

相关问题 更多 >