栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

拼合列表的字典词典(深2级)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

拼合列表的字典词典(深2级)

编辑 :重新阅读原始问题和重新设计的答案,以假定所有非词典都是要拼合的列表。

如果您不确定字典的使用范围,可以使用递归函数。@Arrieta已经发布了一个函数,该函数以递归方式构建非字典值列表。

这是一个生成器,它在字典树中产生连续的非字典值:

def flatten(d):    """Recursively flatten dictionary values in `d`.    >>> hat = {'cat': ['images/cat-in-the-hat.png'],    ...        'fish': {'colours': {'red': [0xFF0000], 'blue': [0x0000FF]},    ...      'numbers': {'one': [1], 'two': [2]}},    ...        'food': {'eggs': {'green': [0x00FF00]},    ...      'ham': ['lean', 'medium', 'fat']}}    >>> set_of_values = set(flatten(hat))    >>> sorted(set_of_values)    [1, 2, 255, 65280, 16711680, 'fat', 'images/cat-in-the-hat.png', 'lean', 'medium']    """    try:        for v in d.itervalues(): for nested_v in flatten(v):     yield nested_v    except AttributeError:        for list_v in d: yield list_v

doctest将结果迭代器传递给

set
函数。这很可能就是您想要的,因为正如Martelli先生所指出的那样,字典值没有内在顺序,因此没有理由跟踪它们的查找顺序。

您可能需要跟踪每个值的出现次数;如果将迭代器传递给,则此信息将丢失

set
。如果您想跟踪它,只需将的结果传递
flatten(hat)
给其他函数而不是即可
set
。在Python
2.7下,该其他函数可以是
collections.Counter
。为了与发展程度较低的python兼容,您可以编写自己的函数,或者(在效率方面有所损失)
sorted
与结合使用
itertools.groupby



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383536.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号