【问题标题】:Make Dictionary with only keys?只用键制作字典?
【发布时间】:2017-07-09 17:31:05
【问题描述】:

我需要制作一个只包含键的字典。

我不能使用d.append(),因为它不是一个列表,也不是setdefault,因为它需要两个参数:一个键和一个值。

它应该如下工作:

d = {}

添加“a”:

d = {"a"}

添加“b”:

d = {"a", "b")

添加“c” ...

#Final result is

d = {"a", "b", "c"}

我需要什么代码才能得到这个结果? 还是另一种解决方案?比如列一个清单。

l = ["a", "b", "c"] # and transform it into a dictionnary: d = {"a", "b", "c"} ?

【问题讨论】:

  • d = {"a", "b", "c"} 这不是字典 只是set
  • 如果你从d = set()开始而不是d = {},它会起作用的。
  • 你需要的是 set 而不是字典
  • dict.fromkeys('abc') 会给你{'a': None, 'c': None, 'b': None},但听起来你想要的是set

标签: python dictionary append key


【解决方案1】:

只有键的dict 称为set

从空集而不是字典开始。

d = set()
d.add('a')
d.add('b')
d.add('c')

您还可以通过{} 表达式创建集合:

d = { 'a', 'b', 'c' }

或者使用列表:

d = set(['a', 'b', 'c'])

【讨论】:

  • 我如何检索值 b?在字典中我不需要遍历它
  • @LeonardoRick 您可以通过迭代获取集合的元素。在字典中,如果您已经有一个键,则可以查找关联的值,但在集合中没有值。因此,如果您已经拥有密钥,则无需查找任何内容。或者你在问什么?
  • 我已经有了密钥,但不想检查这个密钥是否在集合中。在字典中它会像if 'key' in dict 一样快。我可以在一组上这样做吗?在集合、字典甚至列表上执行此操作有什么区别
  • @LeonardoRick 是的if key in mysetif key in mydict 一样快。比在列表中快得多。见docs for set
  • 重要提示:set 不会保留插入顺序。 print(d) 将打印 {'b', 'c', 'a'}(不是 {'a', 'b', 'c',})
【解决方案2】:

应该这样做:

l = ["a", "b", "c"]

d = {k:None for k in l}

正如@Rahul 在 cmets 中所说,d = {"a", "b", "c"} 不是有效的字典定义,因为它缺少值。您需要为键分配值才能存在字典,如果缺少值,您可以分配 None 并稍后更新。

【讨论】:

  • 感谢您的回答,但这不是我想要的。这将返回 {'a': None, 'b': None, 'c': None} 而我不想要“None”
  • @MartinM 你必须有一些东西。它不必是None。它也可能是一个空字符串 ('')。
  • Rahul K P 和 khelwood 找到了解决方案。还是谢谢!
  • 太棒了 - 谢谢 :)
【解决方案3】:

您需要set 而不是字典,

l = ["a", "b", "c"]
d = set(l)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2018-10-03
    相关资源
    最近更新 更多