【问题标题】:"Dictionary" of name equivalency [duplicate]名称等效的“词典”[重复]
【发布时间】:2021-08-12 20:57:56
【问题描述】:

我有一个括号格式的名称列表,例如Adam (Lawrence, Albert), Erwin (Heintz, Edwin, Bro) 等。这里括号中的名称等同于主名称(Adam = Lawrence = Albert)。如何存储此数据类型,以便我可以轻松地双向访问它。例如。如果我存储为普通字典 ({'Adam':'Lawrence, Albert'}),我可以在 O(1) 中访问 'Adam' 的等价物,但要访问'Lawrence' 的等价物,我必须搜索字典中的所有值。是否有像 {'Adam':'Lawrence':'Albert', 'Erwin':'Heintz':'Edwin':'Bro'} 这样的数据类型,我可以轻松地搜索任何等价物?

【问题讨论】:

  • 你使用字典来翻译——这是一个相对简单的浏览器搜索。
  • 我认为我的问题不等同于您链接的问题。接受的答案充分解决了我的问题。

标签: python dictionary search time-complexity


【解决方案1】:

一个简单的选择是制作一个包含所有选项作为键的字典:

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']}

【讨论】:

  • 这是一个很好的答案。
猜你喜欢
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 2021-05-15
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多