如何反转字典?

时间:2013-05-23 17:09:55

标签: pseudocode

我正在使用基于C的自定义语言,资源有限(某些类似C,其他基于其他语言添加)。我只有非动态数组和矩阵,我也有字典,堆栈,队列和堆,如果是,for和for cicles。

我的问题是:拥有一个带键的字典:'a'(int)和值:'b'(int),并使用这些非动态结构,我怎么能以一种简单的方式反转字典,即我我有一个新词典如下: key:'b'(int),value:'a'(int [])

2 个答案:

答案 0 :(得分:1)

将非动态内存作为最大的问题,而不是担心处理时间或中间工件的大小,如何:

1)将原始字典倒入另一个顺序的元组列表中。然后对它进行排序:

{'a': 1, 'b': 1, 'c': 2}

产生

[[1, 'a'], [1, 'b'], [3, 'c']]

2)遍历此列表,迭代唯一的第一个值并构建映射值列表(即原始键)。

...生产

{'1': ['a', 'b'], '2':['c']}
3)扔掉中间名单&回收那段记忆。

根据事物的大小和需要的速度,您甚至可以添加一个步骤(1.5),遍历中间列表并计算出所有内存需求,然后预先分配适当大小的列表每个元素。同样,这最令人担心的是缺乏动态内存,并且试图从一开始就提出一个“正确大小”的最终结果。

答案 1 :(得分:0)

你做不到。或者至少你不应该。为什么?因为假设你有两个具有相同值的键...

否则,在伪代码中:

create dictionary BAR
for each key in dictionary FOO
    BAR[FOO[key]] = key