Python 从(已排序)字典中删除空值

Python 从(已排序)字典中删除空值,python,dictionary,Python,Dictionary,我有一个arduino发送给我的串行数据被转换成字典 但是,并非所有条目都有值,因为数据是随机发送的 在将字典数据发送到CSV文件之前,我想删除dict中的空值或0值 传入数据如下所示:(仅限值) ['','7','','49','173','158'] 我想让它成为现实 [7'、'49'、'173'、'158] 我当前使用的脚本: import serial import time def delete_Blanks(arrayName): tempArray = array.cop

我有一个arduino发送给我的串行数据被转换成字典

但是,并非所有条目都有值,因为数据是随机发送的

在将字典数据发送到CSV文件之前,我想删除dict中的空值或0值

传入数据如下所示:(仅限值)

['','7','','49','173','158']

我想让它成为现实

[7'、'49'、'173'、'158]

我当前使用的脚本:

import serial
import time

def delete_Blanks(arrayName):
    tempArray = array.copy()
    for key, value in sorted(tempArray.items()):
        if value == "":
            del tempArray[key]
        else:
            print "Value is not nil"

    return tempArray

array = {}

ser = serial.Serial('COM2', 9600, timeout=1)
key = 0

while 1:
    length = len(array)
    if len(array) in range(0,5):
        array.update({key:ser.read(1000)})
        key = key + 1
        print "key is ", key
        print array.values()
        length = len(array)

    else:
        newArray = delete_Blanks(array)
        print newArray.items()
        break

你可以用字典来理解。这将从字典
d
中删除所有假值:

d={key,d[key] for key in d if d[key]}
将输出: ['7','49','173','158']


如果数据数组较长,最好使用迭代器来避免内存泄漏。如果你使用短列表-列表理解很好

如果只是一个简单的列表,你可以这样做

Mylist = filter(None, Mylist)
在创建字典之前,您可以过滤两个列表,一个是包含键的列表,另一个是包含值的列表。假设两个列表的长度相同,则可以

mydict = dict(zip(l1, l2))

要创建新列表

您可以说它看起来像
['','7','','49','173','158']
。那是一张单子,不是字典。
>>> li = ['','7','','49','','173','158']
>>> [e for e in li if e]
['7', '49', '173', '158']
>>> li = ['','7','','49','','173','158']
>>> [e for e in li if e]
['7', '49', '173', '158']