在python列表中的列表中列出

时间:2011-12-11 01:46:40

标签: python

我写了这个,但我不明白为什么它不起作用。顺便说一下,我是编程的初学者。

fav_colours=[["bob"["likes:blue, hates:red"]],["john"["likes:red,hates:black"]],  
["adam"["likes:purple,hates:pink"]]]
print fav_colours

我认为没有任何错误。谢谢。

2 个答案:

答案 0 :(得分:4)

您需要通过逗号分隔每个列表项,因此["bob"["likes:blue, hates:red"]应为["bob", ["likes:blue, hates:red"]

看起来您可能需要使用dict而不是那些内部列表。 {"likes": "blue"}

答案 1 :(得分:1)

除了拉塞尔迪亚斯回答:

拥有多个嵌套列表会让您遇到问题,例如如果你想

  • 访问特定人员的数据。例如。如果你想要John的数据,你必须知道John的列表中有索引1。
  • 检查是否有人 - >你将不得不迭代整个列表并进行比较。如果你想避免重复,同样重要。

要处理这些点,您可以使用字典替换外部列表。此外,我假设喜欢和讨厌的部分应该是单独的字符串:

>>> fav_colours_dict = { "bob" : ["likes:blue", "hates:red"],
... "john" : ["likes:red", "hates:black"],
... "adam" : ["likes:purple", "hates:pink"] }

>>> print fav_colours_dict["john"]
['likes:red', 'hates:black']



接下来要注意的是,您可能只对颜色字符串感兴趣,例如“blue”而没有“likes:”或“hates:”前缀。事实上,只有列表位置你已经拥有了这些信息,因为0索引“喜欢”,1索引“讨厌”。此外,由于没有其他位置有意义,最好使用()将颜色列表更改为元组。

所以字典改为:

>>> fav_colours_dict = { "bob" : ("blue", "red"),
... "john" : ("red", "black"),
... "adam" : ("purple", "pink")}

现在设置

>>> likes, hates = range(2)    # likes = 0, hates = 1

您可以通过以下方式访问adam中的“赞”颜色:

>>> print fav_colours_dict["adam"][likes]
purple


如果您想为喜欢或讨厌添加多种颜色,最好的方法是使用{}的集合。这确保了两次都不使用颜色:

>>> fav_colours_dict = { "bob" : ({"blue", "yellow"}, {"red"}),
>>> ... "john" : ({"red"}, {"black", "green"}),
>>> ... "adam" : ({"purple", "black"}, {"pink"}) }

>>> print fav_colours_dict
{'bob': (set(['blue', 'yellow']), set(['red'])), 'john': (set(['red']),
set(['black', 'green'])), 'adam': (set(['purple', 'black']), set(['pink']))}

看到上面的输出你可能想要更好的打印:

>>> for person, colours in fav_colours_dict.iteritems():
...     print person
...     print "- likes: " + ", ".join(colours[likes])
...     print "- hates: " + ", ".join(colours[hates])
...
bob
- likes: blue, yellow
- hates: red
john
- likes: red
- hates: black, green
adam
- likes: purple, black
- hates: pink


  

所以最后你使用了python最常用的数据结构:字典,元组和集合。