从给定列表中出现的键中提取子字典

kja*_*nko 2 python python-2.7 python-3.x

考虑一下我有一本看起来像这样的字典:

{1=>a, 2=>b, 3=>c, 4=>d}

和一个看起来像这样的列表:

[1, 2, 3]

有没有一种方法可以返回一个仅包含的子词典

{1=>a, 2=>b, 3=>c}

hir*_*ist 8

常规的 dict-comprehension 会做到这一点:

d = {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
keys = [1, 2, 3]

dct = {key: d[key] for key in keys}
print(dct)  # {1: 'a', 2: 'b', 3: 'c'}
Run Code Online (Sandbox Code Playgroud)

有两种方法可以处理keys原始字典中没有的键:

keys = [1, 2, 3, 7]

# default value None
dct = {key: d[key] if key in d else None for key in keys}
print(dct)  # {1: 'a', 2: 'b', 3: 'c', 7: None}

# ignore the key if it is not in the original dict
dct = {key: d[key] for key in set(keys).intersection(d.keys())}
print(dct)  # {1: 'a', 2: 'b', 3: 'c'}
Run Code Online (Sandbox Code Playgroud)

  • @Priya 那将是 `set(keys) - set(d)` 或 - 如果您更喜欢列表:`[k for k in keys if k not in d]`。 (2认同)