忽略字典中的空值(来自大型.cdt文件)Python

时间:2017-02-02 16:58:21

标签: python dictionary

我正试图找到一种方法来忽略大字典中的空输入。数据来自.cdt文件 - 它最初是excel但现在是文本格式。我尝试了一些修复,没有任何作用。我将找到该字典的每个元素的最小和最大输入和标准偏差,但我需要确保首先忽略所有空条目。

这是我用来挑选和打印我想要的特定变量的代码。任何正确方向的指针都会受到赞赏。

谢谢!

planets = {}

with open ('planets.csv', 'r') as f:

    for line in f :

        line = line.strip("\n ' '")
        line = line.split(",")
        name = line[1]

        exop = {'Host Name' : line[1],
                'Planet Letter' : line[2],
                'Discovery Method' : line[3],
                'Number of Planets in System' : line[4],
                'Orbital Period [days]' : line[5],
                'Orbit Semi-Major Axis [AU]' : line[6],
                'Eccentricity' : line[7],
                'Inclination[deg]' : line[8],
                'Planets Mass of M*sin(i)[Jupiter mass]' : line[9],
                'Planets Mass of M*sin(i) Provenance]' : line[10],
                'Planet Radius [Jupiter radii]' : line[11],
                'Planet Density [g/cm**3]' : line [12],
                'TTV Flag' : line [13],
                'Kepler Field Flag' : line[14],
                'K2 Mission Flag' : line[15],
                'Number of Notes' : line[16],
                'Distance [pc]' : line[21]
                'Effective Temparature [k]' : line[25]}
        print exop
        print exop['Distance [pc]'] 
f.close();

1 个答案:

答案 0 :(得分:0)

最后可能更容易过滤词典。这是因为如果您检查line是否有任何空值,例如line[24](从未使用过)是空的但没有其他值,那么您最终会丢弃有效数据。

空字符串是假的,但数值0也是如此。我已经编写了一个列表解析,只有在空字符串而不是零值的情况下才能丢弃最终列表中的项目。

list_of_dicts = []

for x in range(4):
    list_of_dicts.append({'a': 123, 
                          'b': 'hello',
                          'c': 0
                          })

# Bad entry
list_of_dicts.append({'a': 123, 
                      'b': '',
                      'c': 456
                     })


# Rebuild without bad entries
new_list_of_dicts = [dictionary for dictionary in list_of_dicts 
                    if all(str(data[1]) for data in dictionary.items())] # The logic to catch empty strings

print(list_of_dicts)
print('\n')
print(new_list_of_dicts)