假設我有以下的字典和列表:是否可以根據鍵列表在Python中對字典進行排序?
my_dictionary = {1:"hello", 2:"goodbye", 3:"World", "sand":"box"}
my_list = [1,2,3]
有直達(Python化)的方式來獲得鍵值對出了其鍵列表中的元素的字典,在順序由列表順序定義?
簡單的方法是簡單地遍歷列表並逐個拉出地圖中的值,但我不知道python是否與字典的列表切片等效。
假設我有以下的字典和列表:是否可以根據鍵列表在Python中對字典進行排序?
my_dictionary = {1:"hello", 2:"goodbye", 3:"World", "sand":"box"}
my_list = [1,2,3]
有直達(Python化)的方式來獲得鍵值對出了其鍵列表中的元素的字典,在順序由列表順序定義?
簡單的方法是簡單地遍歷列表並逐個拉出地圖中的值,但我不知道python是否與字典的列表切片等效。
不知道是否有足夠的Python的,但是這是工作:
res = [(x, my_dictionary[x]) for x in my_list]
這是一個list comprehension,但是,如果你需要遍歷該列表中只有一次,你也可以把它變成一臺發電機的表情,例如:
for el in ((x, my_dictionary[x]) for x in my_list):
print el
當然,以前的方法只有在列表中的所有元素都存在於字典中時才起作用;考慮到鑰匙不存在的情況下,你可以這樣做:
res = [(x, my_dictionary[x]) for x in my_list if x in my_dictionary]
一個直截了當的方法是從字典中挑選的每一項檢查,關鍵是出現在列表
>>> [e for e in my_dictionary.items() if e[0] in my_list]
[(1, 'hello'), (2, 'goodbye'), (3, 'World')]
上面的搜索將是線性的,所以你可能會被轉換列表中設置
>>> [e for e in my_dictionary.items() if e[0] in set(my_list)]
[(1, 'hello'), (2, 'goodbye'), (3, 'World')]
最後,如果你需要一本字典,而不是關鍵的名單,值對的元組你獲得一些性能可以用字典理解
>>> dict(e for e in my_dictionary.items() if e[0] in set(my_list))
{1: 'hello', 2: 'goodbye', 3: 'World'}
>>>
這是否是一個好主意取決於列表的大小。如果名單很小,這是相當浪費的。 – 2012-03-29 20:13:54
您的第二個和第三個示例每次都不會重新計算set(my_list)嗎? – DSM 2012-03-29 20:16:03
這個怎麼樣?取my_list
中的每一項並將其傳遞給字典的get
方法。它還通過將其替換爲None
來處理丟失密鑰周圍的異常。
map(my_dictionary.get, my_list)
如果你想tupples zip
它 -
zip(my_list, map(my_dictionary.get, my_list))
如果你想有一個新的字典,通過元組與dict。
dict(zip(my_list, map(my_dictionary.get, my_list)))
>>> zip(my_list, operator.itemgetter(*my_list)(my_dictionary))
[(1, 'hello'), (2, 'goodbye'), (3, 'World')]
由於問題是關於語言特徵的使用我才真正嘗試過谷歌。 =) – merlin2011 2012-03-29 20:21:35