这两个列表有什么区别?

时间:2016-08-22 18:16:08

标签: python list dictionary nested

我有一个词典列表,在这些词典中,有时会出现一个特定的键。该特定键可以具有字典作为其值,并且该字典中是感兴趣的键值对。或者,特定密钥可以包含包含感兴趣的键值对的字典列表。 在尝试在列表中获取感兴趣的值的过程中,我遇到了一个更基本的问题:当我尝试创建如上所述的列表时,我遇到了类型错误。

因此,我将实际数据中的列表尽可能减少,并按预期创建列表。也许我只是醒了太久,但我不能为我的生活看到创造的清单和不清楚的清单之间的区别。

bad_list = list[{'info1':'infoA', 'info2':'infoB'},
{'info1':'infoC', 'info2':'infoD', 'a_dictionary':{'of_interest':'item1','not_interesting':'item1a'}},
{'info1':'infoE', 'info2':'infoF', 'stuff_I_want':{'dlist1': [{'of_interest':'item2', 'not_of_interest':'item3'}, {'of_interest':'item4', 'not_of_interest':'item5'}],'dlist2':[{'of_interest':'item6','not_of_interest':'item7','dont_care':'about_this'},{'of_interest':'item8', 'not_interesting':'item9'}]}}]

给出

Traceback (most recent call last):
File "C:\Users\user1\Anaconda2\lib\site-packages\IPython\core\interactiveshell.py", line 2885, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-426-5b36ee39e1b4>", line 3, in <module>
{'info1':'infoE', 'info2':'infoF', 'stuff_I_want':{'dlist1':[{'of_interest':'item2', 'not_of_interest':'item3'}, {'of_interest':'item4', 'not_of_interest':'item5'}],'dlist2':[{'of_interest':'item6','not_of_interest':'item7','dont_care':'about_this'},{'of_interest':'item8', 'not_interesting':'item9'}]}}]
TypeError: 'type' object has no attribute '__getitem__'

但:

good_list = [{u'_score': 22.789707, u'symbol': u'RP4-669L17.10', u'_id': u'ENSG00000237094', u'query': u'ENSG00000237094'},
{u'pfam': u'PF03715', u'name': u'NOC2 like nucleolar associated transcriptional repressor', u'_score': 22.789707, u'symbol': u'NOC2L', u'go': {u'CC': [{u'term': u'nucleus', u'pubmed': [16322561, 20959462], u'id': u'GO:0005634', u'evidence': u'IDA'}, {u'term': u'nucleoplasm', u'pubmed': 20123734, u'id': u'GO:0005654', u'evidence': u'IDA'}], u'MF': [{u'term': u'chromatin binding', u'pubmed': [16322561, 20123734], u'id': u'GO:0003682', u'evidence': u'IDA'}, {u'term': u'transcription corepressor activity', u'pubmed': 16322561, u'id': u'GO:0003714', u'evidence': u'IDA'}]}, u'query': u'ENSG00000188976', u'_id': u'26155'},
{u'pfam': u'PF00858', u'name': u'sodium channel epithelial 1 delta subunit', u'_score': 22.79168, u'symbol': u'SCNN1D', u'go': {u'CC': [{u'term': u'plasma membrane', u'id': u'GO:0005886', u'evidence': u'IDA'}, {u'term': u'plasma membrane', u'id': u'GO:0005886', u'evidence': u'TAS'}]}}]

创建没有词典的预期列表。

这两个列表的结构有什么不同,一个合法,另一个不合法?我有一种感觉,我错过了一些愚蠢的东西,但我无法看到它。

3 个答案:

答案 0 :(得分:2)

您不需要list[]来构建列表。它没有构建一个列表。它试图从列表的概念中提取一个元素。我认为你的意思是list(),但这只是更冗长,更不清楚。

[]从对象中获取一个项目。 list[]尝试从列表数据类型访问项目。

list[1]就像在说#O; Okey,从列表中获取第一项。&#34;口译员询问&#34;哪个列表?&#34;,你回答&#34;列表的概念&#34;。然后,口译员回答错误说“#34;列表的概念不是列表&#34;。

深度

some_object[index]some_object.__getitem__(index)是等价的(语法糖)。因此,如果数据类型想要让您下标([index]),则数据类型将定义__getitem__

但是类型的类型(是 - 偶数类型有类型)并不希望您能够自己下标类型,因此类型类型不能定义__getitem__。< / p>

答案 1 :(得分:1)

  

类型'对象没有属性' getitem '

正如错误所示,在第一个中,部分list[<object>]就是问题所在。

您试图按对象索引,而不是整数,因此错误。

简单地删除list部分就可以了。

例如,下面一个可以正常工作。

bad_list ={'info1':'infoA', 'info2':'infoB'},
{'info1':'infoC', 'info2':'infoD', 'a_dictionary':{'of_interest':'item1','not_interesting':'item1a'}},
{'info1':'infoE', 'info2':'infoF', 'stuff_I_want':{'dlist1': [{'of_interest':'item2', 'not_of_interest':'item3'}, {'of_interest':'item4', 'not_of_interest':'item5'}],'dlist2':[{'of_interest':'item6','not_of_interest':'item7','dont_care':'about_this'},{'of_interest':'item8', 'not_interesting':'item9'}]}}

答案 2 :(得分:0)

bad_list使用list func,但尝试下标:

bad_list = list['h'] 
Traceback (most recent call last):   File "<stdin>", line 1, \
in <module> TypeError: 'type' object is not subscriptable