将4D列表转换为两个2D字典,python

时间:2017-04-11 13:50:38

标签: python list dictionary

我有一个4dimension的列表,其中list = [( (1,2,3), 4, (0,2,3), 7) , ( (9,4,5), 10, (3,8,7), 15), .......]。列表中的总行数是2000(长度)。当我通过以下代码将它转换为python中的两个2​​D字典时: -

for i in range(len(list)):
      if list[i] is not None:
         dic1[list[i][0]] = list[i][1]
         dic2[list[i][2]] = list[i][3]

最后将它转换为两个二维字典并检查两个字典的长度是不同的。 len(dic1) = 1660len(dic2) = 1770

为什么两个词典的长度有变化,但它应该给出长度为2000的两个词的相同长度?

任何人都可以帮助i = me获得长度相等的二维字典(2000,)

2 个答案:

答案 0 :(得分:2)

我们来看看下一个例子

some_dictionary = dict()
some_dictionary[(1, 2)] = 'a'
some_dictionary[(1, 2)] = 'b'

毕竟some_dictionary会有一个键(1, 2),其值为'b'

如果您需要为重复键收集不同的值,那么您可以使用带有值列表的字典,然后将每个新值附加到它们,如

keys = [(1, 2), 'a', (1, 2), 'b']
values = ['3', [10, 15], 'text', True]
some_dictionary = dict()
for key, value in zip(keys, values):
    some_dictionary.setdefault(key, []).append(value)

有关docs

dict.setdefault方法的更多信息

答案 1 :(得分:0)

是的,结果是正确的,因为有一些键一次又一次出现,而Dictionary只存储一个相同的键(即覆盖以前的值)

<强>演示:

>>> d = {"a":1, "a": 2}
>>> d
{'a': 2}
>>> d["a"] = 4
>>> d
{'a': 4}

您可以使用2D数据列表,然后我们将得到相同长度的两个2D数据列表。

<强>演示:

>>> list_4d = [( (1,2,3), 4, (0,2,3), 7) , ( (9,4,5), 10, (1,3,4), 8)]
>>> 
>>> list_2d_01 = []
>>> list_2d_02 = []
>>> 
>>> for item in list_4d:
...     list_2d_01.append([item[0], item[1]])
...     list_2d_02.append([item[2], item[3]])
... 
>>> print "Length of list_2d_01:", len(list_2d_01)
Length of list_2d_01: 2
>>> print "Length of list_2d_01:", len(list_2d_02)
Length of list_2d_01: 2

注意:

不要将关键字用作变量名。

list是关键字。不要用作变量名。

<强>演示:

>>> list
<type 'list'>
>>> list001 = list()
>>> list001
[]
>>> list = [1,2,3]
>>> list002 = list()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
>>>