python python字典 python用法 - 如何將字典鍵作為Python中的列表返回?




5 Answers

嘗試list(newdict.keys())

這會將dict_keys對象轉換為列表。

另一方面,你應該問自己是否重要。 編碼的Pythonic方法是假設鴨子打字( 如果它看起來像一隻鴨子,它像鴨子一樣呱呱叫,它是一隻鴨子 )。 dict_keys對象將用於大多數目的的列表。 例如:

for key in newdict.keys():
  print(key)

顯然,插入操作符可能無法工作,但對於字典鍵列表來說,這沒有多大意義。

字典用法 key

Python 2.7中 ,我可以將字典項目作為列表獲取:

>>> newdict = {1:0, 2:0, 3:0}
>>> newdict.keys()
[1, 2, 3]

現在,在Python> = 3.3中 ,我得到了這樣的東西:

>>> newdict.keys()
dict_keys([1, 2, 3])

所以,我必須這樣做才能得到一個列表:

newlist = list()
for i in newdict.keys():
    newlist.append(i)

我想知道,有沒有更好的方法來返回Python 3中的列表?




在“duck typing”定義上有點偏離 - dict.keys()返回一個可迭代的對象,而不是一個類似列表的對象。 它可以在迭代器可以工作的任何地方工作,而不是列表中的任何地方。 列表也是可迭代的,但迭代不是列表(或序列...)

在實際使用情況下,在字典中最常用的關鍵是遍歷它們,所以這是有道理的。 如果你確實需要它們作為列表,你可以調用list()

對於zip()非常類似 - 在絕大多數情況下,它是迭代的 - 為什麼要創建一個全新的元組列表只是為了遍歷它,然後再把它扔掉呢?

這是python使用更多迭代器(和生成器)的大趨勢的一部分,而不是整個地方的列表副本。

dict.keys()應該可以理解,但仔細檢查是否有錯別字......對我來說工作正常:

>>> d = dict(zip(['Sounder V Depth, F', 'Vessel Latitude, Degrees-Minutes'], [None, None]))
>>> [key.split(", ") for key in d.keys()]
[['Sounder V Depth', 'F'], ['Vessel Latitude', 'Degrees-Minutes']]



你也可以使用列表理解

>>> newdict = {1:0, 2:0, 3:0}
>>> [k  for  k in  newdict.keys()]
[1, 2, 3]



除了本頁提到的方法之外,您可以使用運算符模塊中的itemgetter

>>> from operator import itemgetter
>>> list(map(itemgetter(0), dd.items()))
[1, 2, 3]



此外,列表理解似乎不起作用:

>>> parsed_results.keys()
dict_keys(['Sounder V Depth, F', 'Vessel Latitude, Degrees-Minutes'])
>>> things2plot = [key.split(', ') for key in parsed_results.keys()]
>>> things2plot
['Sounder V Depth', 'F']
>>> for key in parsed_results.keys():
...     print(key.split(', '))
...     
['Sounder V Depth', 'F']
['Vessel Latitude', 'Degrees-Minutes']

就我個人而言,我認為這是對鴨子打字的“違反”,因此是一個“錯誤”。 但是我認為其他人一定現在已經註意到了這一點,因此如果它沒有被固定下來,必須被認為是一個“特徵”,但是我不能為了我的生活而明白為什麼。

對克里斯的回复附錄:

好了,克里斯,那麼至少應該更好地使用誤檢測和通知(“你似乎不想在這裡使用迭代器;你是否期待列表?試試列表(dict.keys())...”)會更像我已經知道並喜愛的有用的Python。 :/(我會要求你提供數據來支持你聲明迭代器的功能是dict.keys的“更常見”用例,但你可能會提供它);-)到目前為止因為我的列表理解示例不起作用(對我來說),它是從PyCharm調試器命令行中剪切並粘貼的,所以也許問題就在於此。 (我今天已經遇到過另一個“bug”,所以根本不會讓我感到意外。)謝謝!




Related