在Python中使用for循环仅访问字典的一部分
我的示例字典是这样的:
data_dictionary = {1:'blue',2:'green',3:'red',4:'orange',5:'purple',6:'mauve'}
这个数据字典可以根据输入的数据有更多的元素。第一个值我们称之为负载索引(payload_index)。我总是得到负载索引1到4。
我需要从中组装一个列表,这个比较简单:
for payload_index in data_dictionary :
assembled_packet.append(data_dictionary[payload_index])
我的问题是我需要始终跳过第三个元素。我想我可以用一个条件判断,但那样效率不高:
for payload_index in data_dictionary :
if payload_index <> 3:
assembled_packet.append(data_dictionary[payload_index])
我可以分两步来做,先处理前三个元素,但问题是我不知道怎么获取第三个元素之后的部分,因为第三个元素之后的数量是变化的。我试过用一个非常大的索引(如下),但显然这样是行不通的:
#get element 1 and two
for index in range(0,3):
assembled_packet.append(data_dictionary[index])
#get element 1 and two
for index in range(4,999):
assembled_packet.append(data_dictionary[index])
有什么好主意吗?谢谢!
5 个回答
0
从你的回答来看,不太清楚你是想跳过前三个项目,还是只跳过第三个项目。如果你是想跳过前三个项目,但又不确定你的键总是1、2、3的话,你可以这样做:
keys = list(sorted(data_dictionary.keys()))[3:]
for payload_index in keys:
assembled_packet.append(data_dictionary[payload_index])
1
要让这些for循环正常工作,你可以这样做:
# Get the remaining elements
size = len(data_dictionary)
for index in range(4,size):
assembled_packet.append(data_dictionary[index])
6
效率低下? 这听起来像是过早的优化!直接用普通的代码就行:
for payload_index in data_dictionary:
if payload_index != 3:
assembled_packet.append(data_dictionary[payload_index])
或者更好的方法是:
assembled_packet = [data_dictionary[index] for index in data_dictionary if index != 3]
当然,你也可以简单地这样做:
>>> d = {1:'blue',2:'green',3:'red',4:'orange',5:'purple',6:'mauve'}
>>> d.pop(3)
'red'
>>> list(d.values()) # in py3k; in python-2.x d.values() would do
['blue', 'green', 'orange', 'purple', 'mauve']
附言:<>
早就不推荐使用了。