解析包含set的字典

时间:2015-02-08 07:09:47

标签: python

跟进my previous question之一。

我有一个使用set:

的defaultdict
defaultdict(set, {'a': {'1', '3', '5', '7'}, 'b': {'8', '3', '4', '7'}})

现在我想访问数据,但我不能按名称使用密钥,因为我不知道密钥中的内容。

我可以使用

检索密钥
d.key[n]

因为我不知道密钥本身,但我知道我的字典中总会有3个密钥(-1> n< 3)

现在,如何访问每个集合中的每个值?我试过

d.value[0]

但是这将返回整个集合,而不仅仅是集合中的第一个值。我也试过

d.key[n].value[0]

但是我收到错误,因为字符串没有属性' value'

如何在字典中使用set as value实际访问数据?

这是我的代码:

d=defaultdict(set)
for line in results:
    templist=line.split(' ')
    thekey=templist[0]  
    thevalue=templist[1]

    d[thekey].add(thevalue)

print d.keys()[0]
print d.values()[0]

这将返回我的键,但第二次打印不会返回集合的第一个值,而是整个集合。

2 个答案:

答案 0 :(得分:1)

在当前示例中,您需要使用它存储密钥和访问值:

key = d.keys()[0]
print d[key][0]

假设你的dict看起来像

d = {'a':[1,3,5,7], 'b':[4,7,3,8]} #or
d = {'a':{1,3,5,7}, 'b':{4,7,3,8}}

您可以使用

迭代所有键及其值
for key, value in d.items():
     for item in value:
         print key, item 

这将给出输出

a 1
a 3
a 5
a 7
b 4
b 7
b 3
b 8

答案 1 :(得分:0)

集合是无序的,列表是有序的。在一个集合中,没有firstlast元素,只有元素。说你现在有一个大理石袋,其中一个是第一个,哪个是最后一个?没有订单。但你可以一次带他们 out 1并且有订单。把它们放回袋子里,然后再收到订单。

您可以使用list()将这些元素从集合中取出,就好像它们是包装中的弹珠一样:

>>> x = set(['banana', 'apple', 'orange'])
>>> list(x)
['apple', 'orange', 'banana']  # or possibly some other ordering

或者您可以在for循环中迭代它们

>>> for fruit in x:
...     print(fruit)

但是每次运行时都可能会得到不同的元素顺序,通常情况下,如果没有发生变化,Python将为相同的对象提供相同的顺序。

因此对你原来的问题。您不能通过values()访问字典。在字典里也没有价值的顺序,它又像一袋大理石。而是通过按键索引来访问它们:

>>> d
defaultdict(<class 'set'>, {'a': {1, 3, 5, 7}, 'b': {8, 3, 4, 7}})
>>> d['a']
{1, 3, 5, 7}
>>> as_list = list(d['a'])
>>> print(as_list[0])
1

但这不是通常使用的集合,“第一”值可能是任何东西,即使现在它只是发生是最小的数字。


要打印name, value对,您可以执行以下操作:

>>> for key, value_set in d.items():
...     for value in value_set:
...         print("Key %s has value %s" % (key, value))
... 
Key a has value 1
Key a has value 3
Key a has value 5
Key a has value 7
Key b has value 8
Key b has value 3
Key b has value 4
Key b has value 7