假设我有一个国家缩写词典和相应的名称:
stateDict = {'AL': 'Alabama', 'AK': 'Alaska', 'AZ': 'Arizona', ...}
我还列出了带有州缩写词的词典以及其他数据,包括县和县的fips代码:
stateList = [{'county': 'Los Angeles County', 'state': 'CA', 'fips': '06037', 'cid': '060655'}, {'county': 'Jasper County', 'state': 'AL', 'fips': '18073', 'cid': '180100'}, {'county': 'Lafayette Parish', 'state': 'LA', 'fips': '22055', 'cid': '220102'}, {'county': 'Carver County', 'state': 'AL', 'fips': '27019', 'cid': '275233'}, {'county': 'Bertie County', 'state': 'NC', 'fips': '37015', 'cid': '227344'}...]
正如您在上面看到的,'state': 'AL'
有多个条目。我要在这里使用词典1:stateDict,在列表stateList
中为“ AL”选择所有条目,然后将州名放在stateList中显示的所有县级Fips代码的新列表中代表“ AL”(或处于stateDict的任何其他状态)。因此结果将如下所示:
stateInfo = ['Alabama': {'01003', '01004', '01017'}, 'Alaska': {'02030', '02113', '02014'}...]
或者也许是这样(我不确定确切的选择是什么):
stateInfo = {'Alabama': ['01003', '01004', '01017'], 'Alaska': ['02030', '02113', '02014']...}
使用前面提到的方法,我将使用类似的方法,但是因为我要为stateInfo提取数据,所以我有些困惑。有建议吗?
stateInfo = {}
for i in stateList:
fips = []
for j in stateDict:
for k, v in stateDict:
if 'state' in stateList[i] == k for stateDict[j]:
stateInfo[stateDict[v]].append(stateList('fips'[v])
答案 0 :(得分:2)
我使用了defaultdict
模块中的collections
。基本上,您提供了一个callable,如果找不到它,它将设置初始值:
from collections import defaultdict
state_dict = {'AL': 'Alabama', 'AK': 'Alaska', 'AZ': 'Arizona'}
county_list = [{'county': 'Los Angeles County', 'state': 'CA', 'fips': '06037', 'cid': '060655'}, {'county': 'Jasper County', 'state': 'AL', 'fips': '18073', 'cid': '180100'}, {'county': 'Lafayette Parish', 'state': 'LA', 'fips': '22055', 'cid': '220102'}, {'county': 'Carver County', 'state': 'AL', 'fips': '27019', 'cid': '275233'}, {'county': 'Bertie County', 'state': 'NC', 'fips': '37015', 'cid': '227344'}]
state_info = defaultdict(list)
for county in county_list:
state_info[state_dict[county['state']]].append(county['fips'])
这假设state
中的每个county_list
值在state_dict
中都有一个对应的键。如果没有,则需要进行一些错误检查。
此外,我更改了变量的名称以反映实际数据。
答案 1 :(得分:1)
您可以将setdefault方法用于字典以简化任务
stateInfo = {}
for k in stateList:
if 'state' in k:
stateInfo.setdefault(stateDict[k['state']], []).append(v['fips'])
答案 2 :(得分:0)
先反转您的状态词典
stateDict = {v:k for k,v in stateDict.iteritems()}
然后为每个州找到“ fips”并添加到字典中:
outDict = {}
for i in stateDict:
outDict[i]=[j['fips'] for j in stateList if j['state'] == stateDict[i]]
最后打印:
print outDict