获取嵌套字典中所有二阶键的列表
Get list of all second-order keys in nested dictionary
我想从我的词典中接收所有二阶键的列表。
myDict = {
u'A': {'1998': u'ATLANTA'},
u'B': {'1999': u'MANNHEIM'},
u'C': {'2000': u'BERLIN'},
u'D': {'1998': u'CHICAGO', '1999': u'PRINCETON'},
u'E': {'2000': u'LOUISIANA'},
u'F': {'1998': u'NEW YORK', '1999': u'NEW YORK'}
}
我愿意
years = []
for author in author_aff_dict:
years.extend(author_aff_dict[author].keys())
print uniqfy(years)
其中 uniqfy()
来自 http://www.peterbe.com/plog/uniqifiers-benchmark:
def uniqfy(seq, idfun=None):
if idfun is None:
def idfun(x): return x
seen = {}
result = []
for item in seq:
marker = idfun(item)
if marker in seen: continue
seen[marker] = 1
result.append(item)
return result
一切都按预期工作(即 years
是 ['1998', '2000', '1999']
),但我确信必须有一种 better/shorter 方法来获取嵌套字典的所有键的列表。
你可以使用集合推导:
>>>s= {j for i in myDict.values() for j in i}
set(['1999', '1998', '2000'])
然后,如果您只想要一个列表对象,您可以使用 list()
将 set
转换为列表。
>>> list(s)
['1999', '1998', '2000']
>>> myList = []
>>> for i in myDict.values():
... for j in i.keys():
... if j not in myList: myList.append(j)
... else: continue
...
>>> myList
['1998', '2000', '1999']
编辑:我更喜欢@Kasra 的回答:)
我想从我的词典中接收所有二阶键的列表。
myDict = {
u'A': {'1998': u'ATLANTA'},
u'B': {'1999': u'MANNHEIM'},
u'C': {'2000': u'BERLIN'},
u'D': {'1998': u'CHICAGO', '1999': u'PRINCETON'},
u'E': {'2000': u'LOUISIANA'},
u'F': {'1998': u'NEW YORK', '1999': u'NEW YORK'}
}
我愿意
years = []
for author in author_aff_dict:
years.extend(author_aff_dict[author].keys())
print uniqfy(years)
其中 uniqfy()
来自 http://www.peterbe.com/plog/uniqifiers-benchmark:
def uniqfy(seq, idfun=None):
if idfun is None:
def idfun(x): return x
seen = {}
result = []
for item in seq:
marker = idfun(item)
if marker in seen: continue
seen[marker] = 1
result.append(item)
return result
一切都按预期工作(即 years
是 ['1998', '2000', '1999']
),但我确信必须有一种 better/shorter 方法来获取嵌套字典的所有键的列表。
你可以使用集合推导:
>>>s= {j for i in myDict.values() for j in i}
set(['1999', '1998', '2000'])
然后,如果您只想要一个列表对象,您可以使用 list()
将 set
转换为列表。
>>> list(s)
['1999', '1998', '2000']
>>> myList = []
>>> for i in myDict.values():
... for j in i.keys():
... if j not in myList: myList.append(j)
... else: continue
...
>>> myList
['1998', '2000', '1999']
编辑:我更喜欢@Kasra 的回答:)