我正在尝试使用字典来减少元组列表。起点如下所示。我还包括一个字典 - 字典中的值是我想用来减少我的元组列表
start = [('bryan', 'lucy'), ('david', 'lucy')]
dic = {'bryan': 4.9, 'lucy': 7.5, 'david': 8.0}
我想要它,所以任何具有差异大于1的元素(根据字典中的值)被删除的元组。在这种情况下,所需的输出将是
[('david','lucy')]
b / c david的绝对值 - lucy = 0.5
这是我(失败)尝试解决我的问题。
end = []
for i in range(0,len(start)):
if abs(dic[start[i][0]] - dic[start[i][1]]) < 1.0001:
end.append(dic[start[i]])
任何帮助将不胜感激
答案 0 :(得分:1)
列表理解可以帮助你。
[(e,o) for e, o in start if -1 < dic[e]-dic[o] < 1]
答案 1 :(得分:1)
列表理解可以使这成为一个单行
[ (l,r) for (l,r) in start if abs(dic[l]-dic[r])<1.0001 ]
答案 2 :(得分:0)
试试这个
In [13]: [x for x in start if abs(dic[x[0]] - dic[x[1]]) < 1.0001]
Out[13]: [('david', 'lucy')]
这是python中的list comprehension。它将检查列表中的所有属性,并比较满足此条件的条件abs(dic[x[0]] - dic[x[1]]) < 1.0001
元素将返回。