4

私は持っている

{key1:value1, key2:value2, etc}

私はそれがなりたい:

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

可能な限りPythonで行うにはどうすればよいですか?

ありがとう!

4

7 に答える 7

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]
于 2012-07-05T20:15:02.313 に答える
6

を指定するdictと、これはすべてのアイテムをタプルに結合します

sum(dict.items(),())

タプルではなくリストが必要な場合

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

例えば

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

xその時は

['We', 'Love', 'Your', 'Dict']
于 2012-07-05T20:22:41.763 に答える
2

最も効率的 (必ずしも最も読みやすい、または Python が最も効率的であるとは限りません)

from itertools import chain

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

リストの具体化を除けば、すべてが反復子として保持されます。

于 2012-07-05T20:16:51.627 に答える
2

このコードはあなたの問題を解決するはずです:

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

>>> myList
[1, 1, 2, 2, 3, 3]
于 2012-07-05T20:14:35.310 に答える
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]
于 2012-07-05T20:27:34.403 に答える
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%     --
于 2012-07-05T20:35:44.153 に答える
0
>>> a = {"lol": 1 }
>>> l = []
>>> for k in a.keys():
...     l.append( k )
...     l.append( a[k] )
... 
>>> l
['lol', 1]
于 2012-07-05T20:16:43.953 に答える