将dict转换为列表

时间:2012-07-05 20:12:15

标签: python

我有

{key1:value1, key2:value2, etc}

我希望它成为:

[key1,value1,key2,value2] , if certain keys match certain criteria.

我怎样才能尽可能地进行诡计?

谢谢!

7 个答案:

答案 0 :(得分:11)

这应该可以解决问题:

[y for x in dict.items() for y in x]

例如:

dict = {'one': 1, 'two': 2}

print([y for x in dict.items() for y in x])

这将打印:

['two', 2, 'one', 1]

答案 1 :(得分:6)

给定dict,这会将所有项目组合成元组

sum(dict.items(),())

如果你想要一个列表而不是一个元组

list(sum(dict.items(),()))

例如

dict = {"We": "Love", "Your" : "Dict"}
x = list(sum(dict.items(),()))
然后

x

['We', 'Love', 'Your', 'Dict']

答案 2 :(得分:2)

此代码可以解决您的问题:

myList = []
for tup in myDict.iteritems():
    myList.extend(tup)

>>> myList
[1, 1, 2, 2, 3, 3]

答案 3 :(得分:2)

效率最高(不一定是最具可读性或Python)

from itertools import chain

d = { 3: 2, 7: 9, 4: 5 } # etc...
mylist = list(chain.from_iterable(d.iteritems()))

除了实现列表之外,所有内容都保留为迭代器。

答案 4 :(得分:1)

另一个条目/答案:

import itertools

dict = {'one': 1, 'two': 2}

bl = [[k, v] for k, v in dict.items()]
list(itertools.chain(*bl))

产量

['two', 2, 'one', 1]

答案 5 :(得分:0)

>>> a = {"lol": 1 }
>>> l = []
>>> for k in a.keys():
...     l.append( k )
...     l.append( a[k] )
... 
>>> l
['lol', 1]

答案 6 :(得分:0)

如果速度很重要,请使用extend将键值对添加到空列表中:

l=[]
for t in sorted(d.items()):
    return l.extend(t)


>>> d={'key1':'val1','key2':'val2'}
>>> l=[]
>>> for t in sorted(d.items()):
...    l.extend(t)
... 
>>> l
['key1', 'val1', 'key2', 'val2']

不仅更快,这种形式更容易为每个键,值对添加逻辑。

速度比较:

d={'key1':'val1','key2':'val2'}

def f1():
    l=[]
    for t in d.items():
        return l.extend(t)

def f2():
    return [y for x in d.items() for y in x]

cmpthese.cmpthese([f1,f2])

打印:

    rate/sec    f2     f1
f2   908,348    -- -33.1%
f1 1,358,105 49.5%     --