完全を期すために:map
通常、リスト内包表記の良い代替手段です。
mylist = map(lambda v: v['x'], Mydict.values())
また
mylist = map(lambda k: Mydict[k]['x'], Mydict)
通常、どちらを好むかはあなた次第です。
編集:
パフォーマンスが向上したため、1,000,000 回の繰り返しの簡単な比較を以下に示します。
import timeit
Mydict = {'a': {'y': 1, 'x': 5}, 'b': {'y': 10, 'x': 8}}
def list_append(d):
mylist=[]
for k in d.keys():
mylist.append(d[k]['x'])
def list_comprehension_values(d):
return [v['x'] for v in d.values()]
def list_comprehension_keys(d):
return [d[k]['x'] for k in d]
def map_values(d):
return map(lambda v: v['x'], d.values())
def map_keys(d):
return map(lambda k: d[k]['x'], d)
for method_name in ["list_append",
"list_comprehension_values",
"list_comprehension_keys",
"map_values",
"map_keys"]:
t = timeit.timeit(method_name + "(Mydict)",
"from __main__ import Mydict, " + method_name,
number=1000000)
print "%s: %.2f seconds" % (method_name, t)
結果:
list_append: 0.95 seconds
list_comprehension_values: 0.56 seconds
list_comprehension_keys: 0.47 seconds
map_values: 1.02 seconds
map_keys: 1.01 seconds
*編集 2 *
より大きな辞書の場合
Mydict = dict(zip(range(10000),
[{'x' : random.randint(0,10), 'y' : random.randint(0,10)}
for i in range(10000)]))
繰り返しが少ない (number=10000) 場合、値は異なります。
list_append: 16.41 seconds
list_comprehension_values: 6.00 seconds
list_comprehension_keys: 9.62 seconds
map_values: 15.23 seconds
map_keys: 18.42 seconds
したがって、ここではキールックアップを節約することをお勧めします。