我是Python的新手,如果我的问题似乎太简单/愚蠢,请提前抱歉。
我想提取嵌套字典中某个键下的所有值。
让我解释一下我要做的事情的背景。我有一个具有4列2行的Excel文件,并按以下方式创建了一个嵌套字典:
openCL = open(path+'Client list.csv','r',encoding='utf-8')
readCL = csv.reader(openCL, quoting=csv.QUOTE_MINIMAL)
clientlist = {}
for info in readCL:
clientcode = info[0].replace('\ufeff', '')
clientname = info[1].lower()
mattercode = info[2]
mattername = info[3]
clientlist[clientname] = {'Client Code' : clientcode, 'Matter Code': mattercode, 'Matter Name': mattername}
clientlist的输出如下:
{'hong kong co.': {'Client Code': '897', 'Matter Code': '0095', 'Matter Name': 'Incorporation of Brazilian Subsidiary'}, 'shanghai co.': {'Client Code': '965', 'Matter Code': '3569', 'Matter Name': 'Corporate Matters'}}
我想检索位于“ Matter Code”键中的所有值;为此,我想出了以下for循环:
matter_codes_only = []
for val in [x.values() for x in clientlist.values()]:
matter_codes_only.append(clientlist[clientname].get('Matter Code'))
但是,我收到的输出如下:
In: matter_codes_only
Out: ['3569', '3569']
出于某种原因,我的循环复制了一个值,而忽略了另一个值(即“ 0095”)。我在这里想念什么有什么想法吗?非常欢迎提出更有效的方式来达到我期望的结果的建议!
谢谢!
答案 0 :(得分:0)
尝试使用列表理解:
>>> d = {'hong kong co.': {'Client Code': '897', 'Matter Code': '0095', 'Matter Name': 'Incorporation of Brazilian Subsidiary'}, 'shanghai co.': {'Client Code': '965', 'Matter Code': '3569', 'Matter Name': 'Corporate Matters'}}
>>> [v['Matter Code'] for v in d.values()]
['0095', '3569']
答案 1 :(得分:0)
使用:
In [1]: d = {'hong kong co.': {'Client Code': '897', 'Matter Code': '0095', 'Matter Name': 'Incorporation of Brazilian
...: Subsidiary'}, 'shanghai co.': {'Client Code': '965', 'Matter Code': '3569', 'Matter Name': 'Corporate Matters'}
...: }
In [2]: l = []
In [9]: for v in d.values():
...: for key,val in v.items():
...: if 'Matter Code' in key:
...: l.append(v[key])
...:
...:
In [10]: l
Out[10]: ['0095', '3569']
说明:d
的字典值也再次是字典。因此,我们在字典中寻找键“ Matter Code”,并将其值附加到空列表l
。