我有一个缺少值的字典(密钥在那里,但关联的值为空)。例如,我想要下面的字典:
dct = {'ID':'', 'gender':'male', 'age':'20', 'weight':'', 'height':'5.7'}
要更改为此格式:
dct = {'ID':NaN, 'gender':'male', 'age':'20', 'weight':NaN, 'height':'5.7'}
我怎样才能以最节省时间的方式写出来?
答案 0 :(得分:6)
您可以使用词典理解。同样如评论中所述,在Python中命名dict
并不是一种好的做法。
dct = {'ID':'', 'gender':'male', 'age':'20', 'weight':'', 'height':'5.7'}
dct = {k: None if not v else v for k, v in dct.items() }
print(dct)
输出:
{'ID': None, 'gender': 'male', 'age': '20', 'weight': None, 'height': '5.7'}
只需将None
替换为您想要的默认值即可。
在您的问题中,您想要替换为NaN
。
您可以使用以下任何一项:
float('nan')
如果你使用的是Python 2.x,或者使用Python< 3.5
math.nan
numpy.nan
使用numpy
答案 1 :(得分:1)
您可以使用带有布尔or
表达式的隐式语法:
In [1]: dct = {'ID':'', 'gender':'male', 'age':'20', 'weight':'', 'height':'5.7'}
In [2]: {k: v or None for k, v in dct.items()}
Out[2]: {'ID': None, 'age': '20', 'gender': 'male', 'height': '5.7', 'weight': None}
但请注意,在The Zen of Python中,它说:
明确比隐含更好。
答案 2 :(得分:0)
您可以创建一个类对象来表示NaN
:
class NaN:
def __init__(self, default=None):
self.val = default
def __repr__(self):
return 'NaN'
dct = {'ID':'', 'gender':'male', 'age':'20', 'weight':'', 'height':'5.7'}
new_d = {a:NaN() if not b else b for a, b in dct.items()}
输出:
{'gender': 'male', 'age': '20', 'ID': NaN, 'weight': NaN, 'height': '5.7'}
答案 3 :(得分:0)
您可以使用for循环迭代Dictionary中的所有键和值。
dct = {'ID': '', 'gender': 'male', 'age': '20', 'weight': '', 'height': '5.7'}
for key, value in dct.items():
if value == '':
dct[key] = 'NaN'
print(dct)
当我们打印新词典时,我们得到了这个输出:
{'ID': 'NaN', 'gender': 'male', 'age': '20', 'weight': 'NaN', 'height': '5.7'}
这是节省时间的,因为它是一个快速循环,只要你没有“NaN'值是字符串。我不确定你是否想要将它们作为字符串,但是,你可以改变NaN'的价值。如果那就是你想要的,那就非常简单。 for循环在时间上相对有效,因为它将快速迭代每个值。