反向字典属性设置为ids?
Reverse dictionary attributes set to ids?
我有以下翻译词典:
{0: {'a', 'b', 'c'},
1: {'a', 'b', 'c', 'd'},
2: {'k', 'b', 'e', 'a', 'n'}}
而且我想 'reverse' 它成为键的属性(这里的键是 id 的一种形式)。
给定一组属性,给我相关的id(key)。
例如,给定 {'a', 'b', 'c'}
return 0
.
执行此操作的最佳做法是什么?属性可以以不同的顺序出现,这就是我使用集合的原因。
我应该将它插入数据框吗(翻译table)?或者有其他解决方案?
您可以使用 Series
在 pandas
中实现此目的:
import pandas as pd
x = {0: {'a', 'b', 'c'},
1: {'a', 'b', 'c', 'd'},
2: {'k', 'b', 'e', 'a', 'n'}}
lookup = pd.Series(x)
print(lookup[lookup.values == {'a', 'b', 'c'}])
# 0 {c, b, a}
# dtype: object
您可以遍历整个字典并像这样查找匹配项:
def att_to_key(d: dict, attributes: dict) -> int:
for k,v in d.items():
if v == attributes:
return k
如果您执行以下操作,d 是您的原始字典,属性是您要查找的属性字典
f = att_to_key(d, {"a","b","c"})
print(f)
它输出你的 0
不确定为什么要使用 pandas。这是一个纯粹的 python 解决方案。
您可以反转字典以使用 frozenset
作为键:
d = {0: {'a', 'b', 'c'},
1: {'a', 'b', 'c', 'd'},
2: {'k', 'b', 'e', 'a', 'n'}}
rev_d = {frozenset(k): v for v,k in d.items()}
rev_d[frozenset({'a', 'c', 'b'})]
# 0
我有以下翻译词典:
{0: {'a', 'b', 'c'},
1: {'a', 'b', 'c', 'd'},
2: {'k', 'b', 'e', 'a', 'n'}}
而且我想 'reverse' 它成为键的属性(这里的键是 id 的一种形式)。 给定一组属性,给我相关的id(key)。
例如,给定 {'a', 'b', 'c'}
return 0
.
执行此操作的最佳做法是什么?属性可以以不同的顺序出现,这就是我使用集合的原因。 我应该将它插入数据框吗(翻译table)?或者有其他解决方案?
您可以使用 Series
在 pandas
中实现此目的:
import pandas as pd
x = {0: {'a', 'b', 'c'},
1: {'a', 'b', 'c', 'd'},
2: {'k', 'b', 'e', 'a', 'n'}}
lookup = pd.Series(x)
print(lookup[lookup.values == {'a', 'b', 'c'}])
# 0 {c, b, a}
# dtype: object
您可以遍历整个字典并像这样查找匹配项:
def att_to_key(d: dict, attributes: dict) -> int:
for k,v in d.items():
if v == attributes:
return k
如果您执行以下操作,d 是您的原始字典,属性是您要查找的属性字典
f = att_to_key(d, {"a","b","c"})
print(f)
它输出你的 0
不确定为什么要使用 pandas。这是一个纯粹的 python 解决方案。
您可以反转字典以使用 frozenset
作为键:
d = {0: {'a', 'b', 'c'},
1: {'a', 'b', 'c', 'd'},
2: {'k', 'b', 'e', 'a', 'n'}}
rev_d = {frozenset(k): v for v,k in d.items()}
rev_d[frozenset({'a', 'c', 'b'})]
# 0