合并来自多个词典和列表的数据
Merging data from multiple dictionaries and lists
假设我有一本州缩写和相应名称的字典:
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,为 'AL' 选择列表 stateList
中的所有条目,然后将州名放在一个新列表中,其中包含显示的所有县 fips 代码在 'AL' 的 stateList 中(或 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])
您可以使用字典的setdefault方法来简化任务
stateInfo = {}
for k in stateList:
if 'state' in k:
stateInfo.setdefault(stateDict[k['state']], []).append(v['fips'])
我使用了 collections
模块中的 defaultdict
。基本上你提供一个可调用的,如果找不到它会将初始值设置为:
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'])
这假设 county_list
中的每个 state
值在 state_dict
中都有对应的键。如果他们不这样做,您将需要进行一些错误检查。
此外,我更改了您的变量名称以反映实际数据。
首先反转你的状态字典
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
假设我有一本州缩写和相应名称的字典:
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,为 'AL' 选择列表 stateList
中的所有条目,然后将州名放在一个新列表中,其中包含显示的所有县 fips 代码在 'AL' 的 stateList 中(或 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])
您可以使用字典的setdefault方法来简化任务
stateInfo = {}
for k in stateList:
if 'state' in k:
stateInfo.setdefault(stateDict[k['state']], []).append(v['fips'])
我使用了 collections
模块中的 defaultdict
。基本上你提供一个可调用的,如果找不到它会将初始值设置为:
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'])
这假设 county_list
中的每个 state
值在 state_dict
中都有对应的键。如果他们不这样做,您将需要进行一些错误检查。
此外,我更改了您的变量名称以反映实际数据。
首先反转你的状态字典
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