【问题标题】:Pythonic way of duplicating specific properties of a dict?复制dict的特定属性的Pythonic方式?
【发布时间】:2015-03-25 07:57:36
【问题描述】:

很多时候我发现自己使用copy.deepcopy() 来创建dict 的副本,然后使用del 我不需要的属性。

我不做以下事情:

  1. 参考现有dict;因为我需要在保留原始dict 的同时操纵这些值。
  2. 复制我真正需要的dict 的特定属性;因为有时我必须操纵现有属性来创建新属性(对于新的dict),之后我不需要现有的属性(在新的dict 中)。

我能想到的替代方案:

  1. 大量使用临时变量而不是copy.deepcopy整个dict,并让临时变量随作用域自动过期。

那么,我是按照 Python 的方式来做的吗?

【问题讨论】:

  • 用现有属性创建新属性然后删除它们是什么意思?我不明白第 2 点。
  • 我的意思是我需要新dict中的某些属性,这些属性在旧dict中不存在,但可以通过修改旧dict的一些现有属性来生成。跨度>
  • 那你为什么不先把这些属性从旧字典中复制出来,然后在新字典中修改这些属性呢?正如您所说,无论如何您都必须在旧字典中修改这些以创建新字典。这样,您就可以使用复制特定属性的方法。
  • 是的,我可以,但这会给我留下同样的问题,即我必须 del 来自新 dict 的旧属性(一旦我用旧的修改形式)。
  • 我认为您最好在问题中发布一些示例和预期输出,以帮助我们更好地理解。

标签: python memory dictionary copy


【解决方案1】:

如果你想要来自字典 a"foo""bar" 键,以及它们的值 deepcopy'ed,怎么样:

dict((x,copy.deepcopy(a[x])) for x in ('foo','bar'))

如果您不需要值的副本:

dict((x,a[x]) for x in ('foo','bar'))

【讨论】:

  • 正如我在问题中所说的那样,如果我必须操纵/修改一些现有属性来创建新属性,这将不起作用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 2016-07-28
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
相关资源
最近更新 更多