我无法理解这一个。还是我过于复杂化了?我试图使这个代码更“Pythonic”。
statuses = {record['id'] : [] for record in data}
for record in data:
for status in record['statuses']:
data = {
'status_code': status['statusCode'],
'short_desc': status['statusShortDesc'],
}
if 'statusLongDesc' in status:
data.update({'long_desc': status['statusLongDesc']})
else:
data.update({'long_desc': ''})
statuses[record['id']] += [data]
}
}
这里有几个挑战,我知道下面的代码是错误的,但是我想知道如何找到我想要的东西:
如何在理解中更新字典中的列表?顺着这个。这会有用吗?对我来说,有些事情不合适。我是否被卷曲的括号带走了?
statuses = {
{
record['id']: list({
'status_code': status['statusCode'],
'short_desc': status['statusShortDesc'],
'long_desc': ''
})
}
for record in data for status in record['statuses']
}
这会产生TypeError: unhashable type: 'dict'
then if 'statusLongDesc' in status list.extend('long_desc': status['statusLongDesc'])
添加到上面的理解中。答案 0 :(得分:2)
我不会过分复杂化。您可以用来简化原件的最重要的事情是使用get
方法。
statuses = {record['id']: [] for record in data}
for record in data:
for status in record['statuses']:
statuses[record['id']].append({
'status_code': status['statusCode'],
'short_desc': status['statusShortDesc'],
'long_desc': status.get('statusLongDesc', ''),
})
现在,如果你愿意,你可以用一个使用列表理解的字典理解来替换循环。
statuses = { record['id']: [{...} for status in record['statuses']] for record in data }
其中{...}
是原始版本中的data
字典。
答案 1 :(得分:1)
您可以使用理解轻松创建列表,而不是.append
ing:
statuses = {}
for record in data:
statuses[record['id']] = [
{
'status_code': status['statusCode'],
'short_desc': status['statusShortDesc'],
'long_desc': status.get('statusLongDesc', ''),
} for status in record['statuses']
]
如果我有嵌套的理解,那么它也可以用这种方式完成:
statuses = {
record['id']: [{
'status_code': status['statusCode'],
'short_desc': status['statusShortDesc'],
'long_desc': status.get('statusLongDesc', ''),
} for status in record['statuses']
] for record in data
}
但我发现它不可读。