2024-06-28 11:27:29 发布
网友
我目前有一个字典,它将标准化的互信息分数映射到多序列比对中的比对站点,这些站点存储在一个列表中。然而,我意识到两个列表可能恰好有相同的分数。因此,字典中只存储一个列表,因为分数是关键。集群应该是唯一的,所以我不知道该怎么做,因为我的列表没有哈希函数
这就是我的数据。理想情况下,我只想反转键和值
{ 0.475: [10, 11] 0.434: [12, 14] 0.404: [16, 18] 0.341: [21, 22] }
从this answer,您可以尝试从内置的dict创建一个新类:
dict
class Dictlist(dict): def __setitem__(self, key, value): try: self[key] except KeyError: super(Dictlist, self).__setitem__(key, []) self[key].append(value)
所以
>>> d = Dictlist() >>> d['100'] = [1, 2] >>> d['100'] = [3, 4] >>> d {'100': [[1, 2], [3, 4]]}
mydict = {0.475: [10, 11], 0.434: [12, 14], 0.404: [16, 18], 0.341: [21, 22]} newdict = dict() for k, v in mydict.items(): newdict[tuple(v)] = k print(newdict) # {(10, 11): 0.475, (12, 14): 0.434, (16, 18): 0.404, (21, 22): 0.341}
您可以在此处使用字典理解:
d = {0.475: [10, 11], 0.434: [12, 14], 0.404: [16, 18], 0.341: [21, 22]} print({tuple(d[n]):n for n in d})
{(10, 11): 0.475, (12, 14): 0.434, (16, 18): 0.404, (21, 22): 0.341}
不能直接反转键和值,因为列表是不可损坏的,因此不能保留为键
如果您有重复列表,您可能希望创建重复列表的枚举。您可以这样做:
from collections import defaultdict d = {0.475: [10, 11], 0.434: [12, 14], 0.404: [16, 18], 0.341: [12, 14]} new_d = dict() d_counts = defaultdict(int) for n in d.keys(): value = tuple(d[n]) new_d[(value, d_counts[value])] = n d_counts[value] += 1 print(new_d)
{((10, 11), 0): 0.475, ((12, 14), 0): 0.434, ((16, 18), 0): 0.404, ((12, 14), 1): 0.341}
从this answer,您可以尝试从内置的
dict
创建一个新类:所以
您可以在此处使用字典理解:
输出
不能直接反转键和值,因为列表是不可损坏的,因此不能保留为键
更新
如果您有重复列表,您可能希望创建重复列表的枚举。您可以这样做:
输出2
相关问题 更多 >
编程相关推荐