获取嵌套字典中所有二阶键的列表

MER*_*ose 3 python dictionary key

从我的字典词典中,我希望收到所有二阶键的列表.

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'}
}
Run Code Online (Sandbox Code Playgroud)

我做

years = []
for author in author_aff_dict:
    years.extend(author_aff_dict[author].keys())
print uniqfy(years)
Run Code Online (Sandbox Code Playgroud)

这里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
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作(即years['1998', '2000', '1999']),但我确信必须有一个更好/更短的方式来获取嵌套字典的所有键的列表.

Kas*_*mvd 6

您可以使用集合理解:

>>>s= {j for i in myDict.values() for j in i}
set(['1999', '1998', '2000'])
Run Code Online (Sandbox Code Playgroud)

然后,如果您只想要一个列表对象,您可以使用它list()来转换set为列表.

>>> list(s)
['1999', '1998', '2000']
Run Code Online (Sandbox Code Playgroud)