这是我最初的字典:
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 循环的情况下做到这一点?字典还蛮大的...
非常感谢您的帮助。
如果您希望在转换后仅访问字典的几个键,您可以编写一个包装器;就像是:
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()};它清晰明了,这通常是更重要的问题。