我有一个相当大的对象集合,其中只需要4个数据点,它们看起来如下所示:
{
'date': '01/01/1900'
'info': {'contact': 'Jane Doe',
'id': 298342,
'address': '123 Street Rd.'},
'account': {'name': 'Random Event Name',
'id': 9623075},
'guest_count': 523,
'rooms': [{'name': 'Room A',
'id': 209353,
'capacity': 300},
{'name': 'Room B',
'id': 630923,
'capacity': 50}],
'start_time': '10:00:00',
'end_time': '15:45:00',
.
.
.
}我有一个简单的for循环来迭代对象并提取我需要的信息:
info = []
for event in events:
start_time = event['start_time']
location = 'Offsite' if event['rooms'][0]['name'] == 'Offsite' else 'In-House'
name = event['account']['name']
guest_count = event['guest_count']
info.append([start_time, location, name, guest_count])然后,我将其转换为以下列表理解:
info = [[event['start_time'], 'Offsite' if event['rooms'][0]['name'] == 'Offsite' else 'In-House', event['account']['name'], event['guest_count']] for event in events['results']]这显然违反了80个字符规则,似乎找不到任何关于如何格式化变量重列表理解的文档。
这就是我最后所做的,但它仍然显得相当丑陋:
sanitized_events = [
[event['start_time'],
'Offsite' if event['rooms'][0]['name'] == 'Offsite' else 'In-House',
event['account']['name'],
event['guest_count']] for event in events]发布于 2021-10-17 15:55:48
有些代码不应该折叠成列表理解。如果你尝试,它似乎变得更加复杂,那么它是值得问一问,这是否是一条正确的道路开始。
需要考虑的一条路径始终是一个辅助函数。
def _sanitize(event):
location = 'Offsite' if event['rooms'][0]['name'] == 'Offsite' else 'In-House'
return (event['start_time'],
location,
event['account']['name'],
event['guest_count'])
sanitized_events = [_sanitize(event) for event in events]这就将列表创建的逻辑从处理过程中分割开来,从而使得更容易理解高层次的思想,并且能够在需要时跳到细节。
发布于 2021-10-17 16:14:59
我会这样做:
info = [[event['start_time'],
'Offsite' if event['rooms'][0]['name'] == 'Offsite' else 'In-House',
event['account']['name'],
event['guest_count']] for event in events['results']]我认为这是可读的-够了。
有些队伍非常喜欢较长的队伍。对于完全或主要由能够就此问题达成一致意见的团队维护的代码,可以将行长限制增加到99个字符,前提是注释和文档字符串仍然包装为72个字符。
因此,您并不局限于<80个字符(用于代码)。我个人发现,我使用的几乎所有工具都能很好地使用90种工具(而且巧合的是,在网站上发布代码时也是如此)。
发布于 2021-10-17 17:03:06
sanitized_events = \
[
[
event['start_time'],
'Offsite' if (event ['rooms'][0]['name'] == 'Offsite')
else 'In-House',
event['account']['name']
],
event['guest_count']
for event in events
]对于嵌套的复杂结构,最好使用c语言中用于块的相同约定:开括号和尾括号有自己的行,匹配的括号位于同一列中。列表的内容是缩进的。
另外,用空行包围多行项。可以选择用空行将for子句与项分开。
https://stackoverflow.com/questions/69606067
复制相似问题