通过理解简化嵌套的 for 循环
Simplifying a nested for loop with comprehension
我正在尝试通过字典简化嵌套 for 循环以构建唯一值列表(嵌套字典值中列出的房间大小)。我已经将代码减少到 4 行,但很好奇是否可以通过列表理解将它减少到 1 行。
这是一个示例 python 字典:
otas = {
Orbitz: {
u'Las Vegas': [u'1 Bedroom Suite B-side']
},
Expedia: {
u'Los Angeles': [u'2 Bedroom Lockoff', u'1 Bedroom Deluxe (A-side)', u'3 Bedroom Deluxe']
},
Priceline: {
u'New York': [u'1 Bedroom Deluxe (A-side)']
},
Travelocity: {
u'Chicago': [u'1 Bedroom Deluxe (A-side)', u'2 Bedroom Lockoff']
}
}
这是四行代码:
rooms = []
for resort in otas.values():
for room in resort.values():
rooms += [r for r in room if r not in rooms]
我知道我目前的做法没有错。我主要是好奇能不能做到。
我想你可以使用三重"nested" 集理解。
rooms = {roomtype
for service in otas
for location in otas[service]
for roomtype in otas[service][location]}
如果您想要返回一个列表,只需将其包装在对 list
.
的调用中
如果您想要的是在otas字典中没有重复的房间,那么:
rooms = set([r for resort in otas.values() for room in resort.values() for r in room])
你可以试试这个
rooms = list(set(reduce(lambda x, y: x+y, [item for x in otas.values() for item in x.values()])))
我正在尝试通过字典简化嵌套 for 循环以构建唯一值列表(嵌套字典值中列出的房间大小)。我已经将代码减少到 4 行,但很好奇是否可以通过列表理解将它减少到 1 行。
这是一个示例 python 字典:
otas = {
Orbitz: {
u'Las Vegas': [u'1 Bedroom Suite B-side']
},
Expedia: {
u'Los Angeles': [u'2 Bedroom Lockoff', u'1 Bedroom Deluxe (A-side)', u'3 Bedroom Deluxe']
},
Priceline: {
u'New York': [u'1 Bedroom Deluxe (A-side)']
},
Travelocity: {
u'Chicago': [u'1 Bedroom Deluxe (A-side)', u'2 Bedroom Lockoff']
}
}
这是四行代码:
rooms = []
for resort in otas.values():
for room in resort.values():
rooms += [r for r in room if r not in rooms]
我知道我目前的做法没有错。我主要是好奇能不能做到。
我想你可以使用三重"nested" 集理解。
rooms = {roomtype
for service in otas
for location in otas[service]
for roomtype in otas[service][location]}
如果您想要返回一个列表,只需将其包装在对 list
.
如果您想要的是在otas字典中没有重复的房间,那么:
rooms = set([r for resort in otas.values() for room in resort.values() for r in room])
你可以试试这个
rooms = list(set(reduce(lambda x, y: x+y, [item for x in otas.values() for item in x.values()])))