将函数转换为嵌套列表推导(Python)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (74)

任何人都可以将以下功能转换成列表压缩!

 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']]

感谢您的任何帮助。

提问于
用户回答回答于

因为什么if i['username'] != result[len(result)-1]['username']: result.append(i)是真正做的是追加i时,有没有什么y发现匹配usernamei(因为如果是在任何比赛y循环的最后一个项目中result也有同样usernamei),可以使内环子列表和如果子列表为空,则使用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]

或者,如果您更喜欢后一个代码示例中的变量名称:

result = [a for s in [[contact for contact in contacts if user['username'] == contact['username']] or [user] for user in users] for a in s]

扫码关注云+社区

领取腾讯云代金券