任何人都可以将以下功能转换为列表压缩!
def something(x,y):
result = []
for i in x:
for j in y:
if i['username'] == j['username']:
result.append(j)
if i['username'] != result[len(result)-1]['username']:
result.append(i)
return result
这是我能想到的最好的方法,但这是不正确的。
result = [user for user in users for contact in contacts if contact['username'] == user['username']]
谢谢您的帮助。
答案 0 :(得分:0)
由于if i['username'] != result[len(result)-1]['username']: result.append(i)
的实际作用是在i
中找不到与y
的{{1}}相匹配的内容时追加username
(因为如果i
循环中有任何匹配项,y
中的最后一项将与result
具有相同的username
),则可以将内部循环作为子列表并使用如果子列表为空,i
运算符默认为or
,最后使用嵌套列表理解来使列表变平:
[i]
或者,如果您在后面的代码示例中更喜欢变量名称,则:
result = [a for s in [[j for j in y if i['username'] == j['username']] or [i] for i in x] for a in s]