【问题标题】:Convert OrderedDict to set in python将 OrderedDict 转换为在 python 中设置
【发布时间】:2018-05-06 07:48:03
【问题描述】:

我有一个这样的 OrderedDict:

OrderedDict([
    (1666, [
        ['2ZNV', 'EDO1', 14, '2FCN', 'CD', 119],
        ['2ZNV', 'EDO', 14, '2FCN', 'CD', 119]]), 
    (1056, [['2ZNV', 'EDO', 32, '2FCN','CD', 33]]), 
    (266, [['2ZNV', 'EDO', 14, '2FCN', 'CD', 19]]), 
    (171, [
        ['2ZNV', 'ZN', 9, '2FCN', 'DVA', 19], 
        ['2ZNV', 'ZN', 9, '2FCN', 'CD', 19], 
        ['2ZNV', 'ZN', 9, '2FCN', 'ACT', 19], 
        ['2ZNV', 'EDO', 9, '2FCN', 'CD', 19], 
        ['2ZNV', 'EDO', 9, '2FCN', 'DVA', 19]]),
    (45, [
        ['2ZNV','EDO', 9, '2X8L', 'GOL', 5], 
        ['2ZNV', 'ZN', 9, '2X8L', 'GOL', 5]]),
    (6, [['2ZNV', 'EDO', 2, '2FCN', 'CD', 3]]), 
    (1, [['2ZNV', 'EDO', 1, '2FCN', 'CD', 1]])
])

是否可以在 set 中添加所有值但保持顺序?

我尝试转换为列表,然后从元组设置如下:

for k,v in od.items():
    listset.append(v)
flat = [item for sublist in listset for item in sublist]
xx = set(tuple(x) for x in flat)
print xx

但这不是保持顺序。上面的结果是:

set([
    ('2ZNV', 'ZN', 9, '2FCN', 'DVA', 19),
    ('2ZNV', 'EDO', 14, '2FCN', 'CD', 119),
    ('2ZNV', 'EDO', 9, '2X8L', 'GOL', 5),
    ('2ZNV', 'EDO', 32, '2FCN', 'CD', 33),
    ('2ZNV', 'EDO', 9, '2FCN', 'DVA', 19),
    ('2ZNV', 'ZN', 9, '2FCN', 'ACT', 19),
    ('2ZNV', 'EDO', 9, '2FCN', 'CD', 19),
    ('2ZNV', 'EDO', 1, '2FCN', 'CD', 1),
    ('2ZNV', 'EDO', 14, '2FCN', 'CD', 19),
    ('2ZNV', 'ZN', 9, '2X8L', 'GOL', 5),
    ('2ZNV', 'EDO1', 14, '2FCN', 'CD', 119),
    ('2ZNV', 'EDO', 2, '2FCN', 'CD', 3),
    ('2ZNV', 'ZN', 9,'2FCN', 'CD', 19)
])

提前谢谢你。

【问题讨论】:

  • 一个集合是无序的。所以你不能这样做。
  • 为什么不保留OrderedDict ?使用.keys() 它可以满足您的需求(XY 问题?)
  • 你可以使用 OrderedSet(配方):stackoverflow.com/questions/1653970/…
  • 您将它们添加到集合中的目的是什么?
  • .values() 怎么样?不是一套,但还不够吗?

标签: python python-2.7 list set ordereddictionary


【解决方案1】:

您可以使用此配方 https://code.activestate.com/recipes/576694/ 中的 OrderedSet。只是

OrderedSet([tuple(item) for sublist in od.values() for item in sublist])

【讨论】:

    【解决方案2】:

    一个集合是无序的,但你可以创建一个唯一元组的列表:

    listset = []
    for k, v in od.items():
        if (k, v) not in listset:
            listset.append((k, v))
    

    【讨论】:

      猜你喜欢
      • 2018-12-08
      • 2021-10-24
      • 2021-12-01
      • 2019-01-19
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 2014-11-03
      相关资源
      最近更新 更多