【问题标题】:How to create a dictionary from a list of strings with same key, value in pythonpython - 如何从具有相同键值的字符串列表中创建字典
【发布时间】:2020-01-06 07:01:53
【问题描述】:

我有一个没有重复元素的字符串列表,我需要生成一个字典,该列表的元素作为该字典的键和值。

列表: file_names = ['a', 'bb', 'ccc', 'ad', 'rsb']

想要的字典:

file_names = {'a': 'a', 'bb':'bb', 'ccc': 'ccc', 'ad': 'ad', 'rsb':'rsb'}

我希望 list 中的每个元素都作为键,并且也恰好将该元素作为该键的值。在 python 特别是 python 2 中生成这样一个字典的最佳(最快)方法是什么?

【问题讨论】:

  • print(dict(zip(file_names, file_names))) ?
  • 或:{fn:fn for fn in file_names}
  • 另外,你为什么需要这样的字典?
  • 我有一个包含大量元素的列表,我需要遍历它来检查一些东西,这对于大量元素来说会变得很慢。因此,我想将其转换为字典以提高我的脚本性能。
  • 拥有一个值等于键的字典有什么意义?使用 key 比获取与 key 相等的值快得多。

标签: python python-2.7 performance dictionary


【解决方案1】:

如果您只想检查某个元素是否在集合中,请考虑使用set。这为您提供了O(1) 成员资格测试的复杂性。您可以通过执行将list 转换为set

file_names = set(['a', 'bb', 'ccc', 'ad', 'rsb'])
file_names = set(file_names)

然后,您只需执行以下操作即可检查成员身份

if file_name in file_names:

【讨论】:

  • 从列表中创建一个集合也需要 O(n) 时间。
  • 是的,但 OP 字典的语义意图仅用于成员资格测试而不是键/值查找,因此推荐了一组。讨论的重点不是数据结构创建时间,而是重复访问效率
  • 如果反对者可以指出这个答案的任何缺点,我很乐意纠正它们
  • 我需要像你之前提到的那样检查成员资格,我只是在循环之前创建了一次数据结构,但是数据结构的创建速度怎么样,而且在成员检查操作中设置得比字典快?
  • 好吧,您甚至不应该担心 set 与 dict 的效率。 整个 集合点用于成员资格测试。仅将 dict 用于成员资格测试是不习惯的
猜你喜欢
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 2021-01-29
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 2021-12-07
相关资源
最近更新 更多