如何有效地从列表字典中提取元素?

plo*_*fat 4 python dictionary

这是我最初的字典:

dic = {'key1': [2,3],
       'key2': [5,1],
       'key3': [6,8]}
Run Code Online (Sandbox Code Playgroud)

注意:为了示例的目的,我使用简单的数字 2,3 等(我这边的 dfs 列表)。

对于每个键,我想提取第一个元素并获得以下结果:

dic2 = {'key1': 2,
        'key2': 5,
        'key3': 6}
Run Code Online (Sandbox Code Playgroud)

是否可以在不进行缓慢的 for 循环的情况下做到这一点?字典还蛮大的...

非常感谢您的帮助。

Jiř*_*aum 5

如果您希望在转换后仅访问字典的几个键,您可以编写一个包装器;就像是:

class ViewFirst:
  def __init__(self, original):
    self.original = original
  def __getitem__(self, key):
    return self.original[key][0]
Run Code Online (Sandbox Code Playgroud)

另一种选择是将其基于defaultdict;这将允许您执行一些操作,例如将新值分配到字典中(新的或现有的键),同时仍然从原始字典中检索其他值:

class DictFromFirsts(collections.defaultdict):
  def __init__(self, original):
    self.original = original
  def __missing__(self, key):
    return self.original[key][0]
Run Code Online (Sandbox Code Playgroud)

编辑:根据评论中的讨论,这是针对特定场景的特殊目的方法。对于通用用途,更喜欢其他答案中的方法之一,例如U12-Forward 的 dict 理解 {k: v[0] for k, v in dic.items()};它清晰明了,这通常是更重要的问题。