在 Python 3 中获取 \`OrderedDict\` 第一项的最短方法

新手上路,请多包涵

在 Python 3 中获取 OrderedDict 第一项的最短方法是什么?

我最好的:

 list(ordered_dict.items())[0]

很长很丑。

我能想到:

 next(iter(ordered_dict.items()))       # Fixed, thanks Ashwini

但它不是很自我描述。

有更好的建议吗?

原文由 Ram Rachum 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 388
1 个回答

可读性编程实践

一般来说,如果您觉得代码不是自描述的,通常的解决方案是将其分解为一个命名良好的函数:

 def first(s):
    '''Return the first element from an ordered collection
       or an arbitrary element from an unordered collection.
       Raise StopIteration if the collection is empty.
    '''
    return next(iter(s))

使用该 辅助函数,后续代码变得非常可读:

 >>> extension = {'xml', 'html', 'css', 'php', 'xhmtl'}
>>> one_extension = first(extension)

从集合中提取单个值的模式

setdictOrderedDict 、生成器或其他不可索引的集合中获取元素的常用方法是:

 for value in some_collection:
    break

和:

 value = next(iter(some_collection))

后者很好,因为 next() 函数允许您在集合为空时指定默认值,或者您可以选择让它引发异常。 next() 函数也明确表示它正在请求下一个项目。

替代方法

如果您确实需要索引和切片以及其他序列行为(例如索引多个元素),使用 list(some_collection) 或使用 [itertools.islice()][2] 转换为列表是一件简单的事情:

 s = list(some_collection)
print(s[0], s[1])

s = list(islice(n, some_collection))
print(s)

原文由 Raymond Hettinger 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题