【问题标题】:Using dictionaries as 0 index-based sets使用字典作为 0 个基于索引的集合
【发布时间】:2013-08-21 16:03:18
【问题描述】:

我正在将一组任意索引映射到索引从 0 开始的另一组。目前我已经这样做了,使用以下代码(密码是解决方案):

[In]  t = [(3, 1, 2, 2), (3, 2, 4, 4), (6, 3, 4, 4)]  ## Original set indexes
[Out] r =  set ([i for sublist in t for i in sublist] )
[In]  r =  set([1, 2, 3, 4, 6])                       ## Set of indexes
[In]  cipher = dict(zip(r, range(len(r))))
[Out] cipher {1: 0, 2: 1, 3: 2, 4: 3, 6: 4}           ## Solution (Mapping key)

但是,由于字典中的键必须是唯一的,我试图在不使用集合的情况下创建“密码”。

[In]  t = [(3, 1, 2, 2), (3, 2, 4, 4), (6, 3, 4, 4)]  ## Original set indexes
[Out] r =  [i for sublist in t for i in sublist] 
[In]  r =  [3, 1, 2, 2, 3, 2, 4, 4, 6, 3, 4, 4]       ## Flattened list
[In]  cipher = dict(zip(r, 'count +1 for each new key' ))
[Out] cipher {1: 0, 2: 1, 3: 2, 4: 3, 6: 4}           ## Mapping key

因此,对于添加到字典中的每个键,添加一个等于当时字典长度的值。不知道有没有可能?

编辑

我做了 Martijn Pieters 所说的 here,但我得到了键和值交换,最后是一个 -1 键。这对我来说似乎有点太先进了,所以我只好用我所拥有的。

from collections import defaultdict
from itertools import count
from functools import partial

keymapping = defaultdict(partial(next, count(-1)))
outputdict = {keymapping[v]: v for v in r}

[Out] {0: 2, 1: 3, 2: 4, 3: 6, -1: 1}

【问题讨论】:

  • 你想得到什么?
  • cipher 将是解决方案。它认为我可以通过省略创建集合来加快速度。如果字典已经创建了一个集合,那么创建一个集合似乎有点多余......
  • 我对你目前实际拥有的东西和你想要得到的东西有点困惑。
  • 你的问题毫无意义。从 cmets 和其他东西来看,您似乎已经拥有了所需的东西。你这样做怎么样:写下几组:输入、预期输出、实际输出。然后我们可以弄清楚你想要什么
  • 似乎答案在这里link。但我从表格 1 开始而不是 cero。

标签: python dictionary set


【解决方案1】:

好的。你有

>>> t = [(3, 1, 2, 2), (3, 2, 4, 4), (6, 3, 4, 4)]

首先你想要这些扁平化:

>>> from itertools import chain
>>> flattened = chain(*t)

然后做成一套

>>> index_set = set(flattened)
>>> index_set
set([1, 2, 3, 4, 6])

然后排序(集合不排序)

>>> index_list = sorted(index_set)

然后想给这里的每个数字分配一个从0开始的新值

>>> cipher = { k: v for i in v, k in enumerate(index_list) }
>>> cipher
{1: 0, 2: 1, 3: 2, 4: 3, 6: 4}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2019-07-06
    • 2013-04-11
    • 2018-01-04
    相关资源
    最近更新 更多