"Dictionary" 的名称等效
"Dictionary" of name equivalency
我有一个括号格式的名字列表,例如Adam (Lawrence, Albert), Erwin (Heintz, Edwin, Bro)
等。此处括号中的名称等同于主名称(Adam = Lawrence = Albert
)。我如何存储这种数据类型,以便我可以轻松地双向访问它。例如。如果我存储为普通字典 ({'Adam':'Lawrence, Albert'}
),我可以在 O(1) 中访问 'Adam'
的等价物,但要访问 'Lawrence'
的等价物,我必须搜索中的所有值词典。是否有像 {'Adam':'Lawrence':'Albert', 'Erwin':'Heintz':'Edwin':'Bro'}
这样的数据类型,我可以在其中轻松搜索任何等效项?
一个简单的选择是制作一个以所有选项为键的字典:
In [17]: names = ['Adam (Lawrence, Albert)', 'Erwin (Heintz, Edwin, Bro)']
In [18]: d = {}
In [19]: for name_s in names:
...: namelist = name_s.replace(" (", ", ")[:-1].split(", ")
...: for name in namelist:
...: d[name] = namelist
...:
In [20]: d
Out[20]:
{'Adam': ['Adam', 'Lawrence', 'Albert'],
'Lawrence': ['Adam', 'Lawrence', 'Albert'],
'Albert': ['Adam', 'Lawrence', 'Albert'],
'Erwin': ['Erwin', 'Heintz', 'Edwin', 'Bro'],
'Heintz': ['Erwin', 'Heintz', 'Edwin', 'Bro'],
'Edwin': ['Erwin', 'Heintz', 'Edwin', 'Bro'],
'Bro': ['Erwin', 'Heintz', 'Edwin', 'Bro']}
这应该仍然是相对内存高效的,因为每个重复的列表都指向相同的底层内存位置:
In [21]: d['Adam'].append("hi")
In [22]: d
Out[22]:
{'Adam': ['Adam', 'Lawrence', 'Albert', 'hi'],
'Lawrence': ['Adam', 'Lawrence', 'Albert', 'hi'],
'Albert': ['Adam', 'Lawrence', 'Albert', 'hi'],
'Erwin': ['Erwin', 'Heintz', 'Edwin', 'Bro'],
'Heintz': ['Erwin', 'Heintz', 'Edwin', 'Bro'],
'Edwin': ['Erwin', 'Heintz', 'Edwin', 'Bro'],
'Bro': ['Erwin', 'Heintz', 'Edwin', 'Bro']}
我有一个括号格式的名字列表,例如Adam (Lawrence, Albert), Erwin (Heintz, Edwin, Bro)
等。此处括号中的名称等同于主名称(Adam = Lawrence = Albert
)。我如何存储这种数据类型,以便我可以轻松地双向访问它。例如。如果我存储为普通字典 ({'Adam':'Lawrence, Albert'}
),我可以在 O(1) 中访问 'Adam'
的等价物,但要访问 'Lawrence'
的等价物,我必须搜索中的所有值词典。是否有像 {'Adam':'Lawrence':'Albert', 'Erwin':'Heintz':'Edwin':'Bro'}
这样的数据类型,我可以在其中轻松搜索任何等效项?
一个简单的选择是制作一个以所有选项为键的字典:
In [17]: names = ['Adam (Lawrence, Albert)', 'Erwin (Heintz, Edwin, Bro)']
In [18]: d = {}
In [19]: for name_s in names:
...: namelist = name_s.replace(" (", ", ")[:-1].split(", ")
...: for name in namelist:
...: d[name] = namelist
...:
In [20]: d
Out[20]:
{'Adam': ['Adam', 'Lawrence', 'Albert'],
'Lawrence': ['Adam', 'Lawrence', 'Albert'],
'Albert': ['Adam', 'Lawrence', 'Albert'],
'Erwin': ['Erwin', 'Heintz', 'Edwin', 'Bro'],
'Heintz': ['Erwin', 'Heintz', 'Edwin', 'Bro'],
'Edwin': ['Erwin', 'Heintz', 'Edwin', 'Bro'],
'Bro': ['Erwin', 'Heintz', 'Edwin', 'Bro']}
这应该仍然是相对内存高效的,因为每个重复的列表都指向相同的底层内存位置:
In [21]: d['Adam'].append("hi")
In [22]: d
Out[22]:
{'Adam': ['Adam', 'Lawrence', 'Albert', 'hi'],
'Lawrence': ['Adam', 'Lawrence', 'Albert', 'hi'],
'Albert': ['Adam', 'Lawrence', 'Albert', 'hi'],
'Erwin': ['Erwin', 'Heintz', 'Edwin', 'Bro'],
'Heintz': ['Erwin', 'Heintz', 'Edwin', 'Bro'],
'Edwin': ['Erwin', 'Heintz', 'Edwin', 'Bro'],
'Bro': ['Erwin', 'Heintz', 'Edwin', 'Bro']}