python - 请根据以下代码解释“defaultdict”概念
问题描述
payload = {'format': 'json', 'per_page': '500', 'date':'1990:2016'}
r = requests.get('http://api.worldbank.org/v2/countries/br;cn;us/indicators/NY.GDP.MKTP.CD', params=payload)
from collections import defaultdict
data = defaultdict(list)
for entry in r.json()[1]:
if data[entry['country']['value']]:
data[entry['country']['value']][0].append(int(entry['date']))
data[entry['country']['value']][1].append(float(entry['value']))
else:
data[entry['country']['value']] = [[],[]]
print(data)
我是否正确理解'if'语句是'False',因为字典是空的:'{'Brazil': [], 'China': [], 'United States': []})', 因此' else:' 首先执行以允许追加?
解决方案
您的理解似乎正确,但代码很差。
首先,它并没有真正利用defaultdict()
,这应该消除了对if
测试的需要。它可以很容易地使用普通字典,通过测试
if entry['country']['value'] in data:
其次,当条目为空时(因为它是默认值),它会创建嵌套列表,但不会将循环的当前条目添加到其中。
此处使用的正确方法是使用defaultdict()
创建嵌套列表的回调函数。
from collections import defaultdict
data = defaultdict(lambda: [[],[]])
for entry in r.json()[1]:
data[entry['country']['value']][0].append(int(entry['date']))
data[entry['country']['value']][1].append(float(entry['value']))
print(data)