我有一个arduino向我发送串行数据,并将其转换为字典。
但是,并非所有条目都具有随机发送的值到期数据。
在将字典数据发送到CSV文件之前,我想从字典中删除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
答案 0 :(得分:0)
您可以使用词典理解。这将从字典d
中删除所有错误值:
d={key,d[key] for key in d if d[key]}
答案 1 :(得分:0)
from itertools import compress
l = ['','7','','49','','173','158']
ret = compress(l, map(lambda x: bool(x), l))
print(list(ret))
将输出 [' 7',' 49',' 173',' 158']
如果你有很长的数据数组 - 最好使用迭代器来避免内存泄漏。如果你使用短名单 - 列表理解就好了
答案 2 :(得分:0)
如果它只是一个简单的列表,你可以做这样的事情
Mylist = filter(None, Mylist)
在创建字典之前,您可以过滤两个列表,包含键的列表和包含值的列表。假设两个列表的长度相同,则可以
mydict = dict(zip(l1, l2))
创建新列表
答案 3 :(得分:0)
>>> li = ['','7','','49','','173','158']
>>> [e for e in li if e]
['7', '49', '173', '158']