跟进my previous question之一。
我有一个使用set:
的defaultdictdefaultdict(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]
这将返回我的键,但第二次打印不会返回集合的第一个值,而是整个集合。
答案 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)
集合是无序的,列表是有序的。在一个集合中,没有first
或last
元素,只有元素。说你现在有一个大理石袋,其中一个是第一个,哪个是最后一个?没有订单。但你可以一次带他们 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