只使用键创建字典?

18

我需要创建一个只包含键的字典。

我不能使用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 dictionary: d = {"a", "b", "c"} ?

3
d = {"a", "b", "c"} 不是字典,而是只有集合(set)。 - Rahul K P
2
如果你使用d = set()代替d = {}开始的话,那么它就可以工作了。 - khelwood
1
你需要一个 set 而不是字典。 - Jean-François Fabre
1
dict.fromkeys('abc')会给你返回 {'a': None, 'c': None, 'b': None},然而根据你的描述,似乎你想要的是一个set - martineau
3个回答

25

只有键没有值的 dict 称为 set

使用空的 set 而不是 dictionary。

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

你还可以通过{}表达式创建一个集合:

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

或者使用列表:

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

我如何获取值b?在字典中,我不需要迭代它。 - Leonardo Rick
@LeonardoRick 你可以通过迭代来获取集合的元素。在字典中,如果你已经有了一个键,你可以查找相关联的值,但是在集合中没有值。因此,如果你已经有了键,就没有什么可查找的了。或者你在问什么? - khelwood
我已经有了这个键,但是想要检查这个键是否在集合中。在字典中,可以使用 if 'key' in dict 来快速实现。那么在集合中能否做到呢?在集合、字典和列表中进行此操作的区别是什么? - Leonardo Rick
1
@LeonardoRick 是的,if key in mysetif key in mydict 一样快。比在列表中要快得多。请参见集合文档 - khelwood
重要提示:set 不会保留插入顺序。print(d) 将打印 {'b','c','a'}(而不是 {'a','b','c'})。 - jerrymouse

9
这就可以了:
l = ["a", "b", "c"]

d = {k:None for k in l}

正如评论中@Rahul所说,d = {"a", "b", "c"}不是一个有效的字典定义,因为它缺少值。你需要为键分配值才能创建字典,如果你缺少值,可以将其分配为None并稍后更新。


谢谢你的回答,但这不是我想要的。它返回的是 {'a': None, 'b': None, 'c': None},而我不想要这个"None"。 - MartinM
@MartinM 你必须要有一个值。它不一定是 None。它也可以是一个空字符串 ('')。 - Ma0
Rahul K P 和 khelwood 找到了解决方案。无论如何还是谢谢! - MartinM
太棒了 - 谢谢 :) - mnikley
@MartinM,解决方案是什么? - user8395964
@user8395964,你可以在他们的答案中看到它;使用 set - Ma0

6
你需要使用一个`set`而不是字典。
l = ["a", "b", "c"]
d = set(l)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接