【问题标题】:dict comprehension with range带范围的 dict 理解
【发布时间】:2017-01-26 19:35:30
【问题描述】:

我正在尝试创建一个字典,它从一个字典中获取键作为键,并从 range() 中获取数字作为值。例如,这是我尝试过的;

files = {'/var/www/test.jgp': 40kb, '/var/www/banner.jgp':40kb}
files_num = dict((key, value) for key in files.keys() for value in range(1, len(files) + 1))

这没有用。我知道如果我创建一个 files.keys() 列表和一个 range(1, len(files) + 1) 列表然后使用 zip 之类的东西,就可以做到这一点。但想知道是否有使用 dict 理解的更优雅的解决方案。

我正在寻找这样的输出:

{'/var/www/test.jgp': 1, '/var/www/banner.jgp': 2}

对此的任何建议(假设可以使用 dict 理解)将不胜感激。

【问题讨论】:

  • 您是否试图让每个键的值代表某种索引或其他东西?我对你想要做什么感到困惑。

标签: python dictionary list-comprehension


【解决方案1】:

您可以使用带有起始索引的enumerate()

>>> {f: n for n, f in enumerate(files, 1)}
{'/var/www/test.jgp': 1, '/var/www/banner.jgp': 2}

请记住dict objects are inherently unordered。如果您只想按未指定的顺序对键进行编号,那显然很好。但是,如果您期待某些特定的排序,您可能需要重新考虑(或collections.OrderedDict)。

【讨论】:

  • 从 Python 3.6 开始,字典是有序的。
  • 谢谢!可以将它们无序排列,只需要为每个文件提供一个数字参考。
  • @MikeMüller:很高兴知道,谢谢(即使这对向后兼容没有帮助)。
  • @是的。但以防万一有人在五年或十年后阅读这个答案,一点上下文,即版本号,可能会有所帮助。
猜你喜欢
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 2018-07-05
  • 2021-06-18
相关资源
最近更新 更多