将函数转换为嵌套列表理解(Python)

时间:2018-07-26 23:06:32

标签: python list-comprehension nested-loops

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

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

谢谢您的帮助。

1 个答案:

答案 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]