仅使用Python访问字典中的部分字典

Wil*_*ild 2 python

我的示例字典是这样的

data_dictionary = {1:'blue',2:'green',3:'red',4:'orange',5:'purple',6:'mauve'}
Run Code Online (Sandbox Code Playgroud)

data_dictionary可以有更多元素,具体取决于传入的数据.第一个值是我们称之为payload_index的值.我总是得到payload_index 1到4.

我需要从中汇编一个列表.满容易:

for payload_index in data_dictionary :
            assembled_packet.append(data_dictionary[payload_index])
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要总是跳过第3个元素.我想我可以做一个if但这样效率很低:

for payload_index in data_dictionary :
            if payload_index <> 3:
                assembled_packet.append(data_dictionary[payload_index])
Run Code Online (Sandbox Code Playgroud)

我可以分两步完成前三个元素,但问题是我无法弄清楚如何获得其余的因为第三个元素之后的元素数量变化.我尝试使用一个不可能的高指数(下图)但显然失败了:

#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])
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢!

Sil*_*ost 6

效率低吗?这似乎是一个不成熟的优化!只需使用普通代码:

for payload_index in data_dictionary:
    if payload_index != 3:
        assembled_packet.append(data_dictionary[payload_index])
Run Code Online (Sandbox Code Playgroud)

甚至更好:

assembled_packet = [data_dictionary[index] for index in data_dictionary if index != 3]
Run Code Online (Sandbox Code Playgroud)

当然,你可以简单地做:

>>> 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']
Run Code Online (Sandbox Code Playgroud)

PS <>早已被弃用.

  • +1.事实上几个月之后,这个小"if"语句可能会更多地传达程序员的意图,而不是两个奇怪的"for"循环恰好会忽略一个元素. (3认同)