我的示例字典就是这个
data_dictionary = {1:'blue',2:'green',3:'red',4:'orange',5:'purple',6:'mauve'}
data_dictionary可以包含更多元素,具体取决于传入的数据。第一个值是我们称之为payload_index的值。我总是得到payload_index 1到4。
我需要从中汇集一个列表。很简单:
for payload_index in data_dictionary :
assembled_packet.append(data_dictionary[payload_index])
我的问题是我需要总是跳过第3个元素。我想我可以做一个if,但这样效率很低:
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])
有什么想法吗?谢谢!
答案 0 :(得分: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']
P.S。 <>
早已被弃用。
答案 1 :(得分:1)
要使这些for循环工作,你可以这样做:
# Get the remaining elements
size = len(data_dictionary)
for index in range(4,size):
assembled_packet.append(data_dictionary[index])
答案 2 :(得分:0)
我能想到的最佳方式是:
output = [elem for elem in data_dictionary.items() if elem[0]!=3]
答案 3 :(得分:0)
从你那里回答并不明显。 如果前者是这种情况,并且你不确定,你的钥匙总是1,2,3,你可以这样做:
keys = list(sorted(data_dictionary.keys()))[3:]
for payload_index in keys:
assembled_packet.append(data_dictionary[payload_index])
答案 4 :(得分:0)
我的问题是我需要总是跳过第3个元素。我想我可以做一个if,但这样效率很低:
这样效率更低:
for payload_index in data_dictionary :
...
assembled_packet.append(data_dictionary[payload_index])
我这样做(Python&gt; = 2.5):
assembled.extend(color for (number, color) in data.iteritems() if number != 3)
对于Python 3.x,将iteritems更改为项目。
不要在变量名中编码类型名称/描述。这是邪恶的。