给出以下元组列表:
l=[((459301.5857207412, 443923.4365563169),
(458772.4179957388, 446370.8372844439))]
以下词典:
mydict={0: (459301.5857207412, 443923.4365563169),
25: (458772.4179957388, 446370.8372844439)}
如何创建一个新列表,其中元组包含与元组本身值相关联的mydict
中的键?
鉴于以上两个例子,结果将是:
mapped=[(0,25)]
答案 0 :(得分:3)
如果
l=[((459301.5857207412, 443923.4365563169),
(458772.4179957388, 446370.8372844439))]
mydict={0: (459301.5857207412, 443923.4365563169),
25: (458772.4179957388, 446370.8372844439)}
我想我可以用这个oneliner概括你的简单案例:
[tuple(k for k,v in mydict.items() if v in sl) for sl in l]
结果:
[(0, 25)]
注意:为了获得更好的性能,预处理l
以更好地创建内部集合会更好,因此使用in
进行查找的速度更快(元组是不可变的/可散列的,所以让'利用它):
l = [set(x) for x in l]
答案 1 :(得分:3)
在大多数情况下,可以使用常规for in
循环来实现:
mapped = [()]
for k in mydict:
if mydict[k] in l:
mapped[0] += (k, )
print(mapped)
输出:
[(0, 25)]
答案 2 :(得分:2)
这个怎么样?
l = [((459301.5857207412, 443923.4365563169),(458772.4179957388, 446370.8372844439))]
d = {0: (459301.5857207412, 443923.4365563169),
25: (458772.4179957388, 446370.8372844439)}
mapped = []
for t in l:
m = []
for k,v in d.items():
if v in l[0]:
m.append(k)
mapped.append(tuple(m))
>>>print(mapped)
>>>[(0, 25)]
答案 3 :(得分:2)
使用反向字典。快速(与其他解决方案不同)保持秩序。
>>> reverse = {v: k for k, v in mydict.items()}
>>> [tuple(map(reverse.get, sub)) for sub in l]
[(0, 25)]