【问题标题】:Not to print None for keys without values in a dictionary不为字典中没有值的键打印 None
【发布时间】:2021-07-26 14:48:05
【问题描述】:

一个字典是用键创建的。后来一些键的值更新了。

在 For 循环中打印键时,没有值的键将打印无。

ma_dict = dict.fromkeys(["David","Mike","Kate","Lilly"])
ma_dict.update({"David" : "Front", "Mike" : "Middle"})

for each in ["David","Mike","Kate","Lilly"]:
    print (each, ma_dict[each])

打印出来:

David Front
Mike Middle
Kate None
Lilly None

不打印None的方法是什么?谢谢。

# outputs wanted
David Front
Mike Middle
Kate 
Lilly 

不要使用 If 语句,例如:

ma_dict = dict.fromkeys(["David","Mike","Kate","Lilly"])
ma_dict.update({"David" : "Front", "Mike" : "Middle"})

for each in ["David","Mike","Kate","Lilly"]:
    if ma_dict[each] != None:
        print (each, ma_dict[each])
    else:
        print (each)

【问题讨论】:

  • 可能是空字符串的默认字典,从集合中导入
  • @masasa,太棒了!你能给出答案吗?

标签: python dictionary for-loop


【解决方案1】:

如果只是用于打印,您可以考虑使用字典推导将None 替换为空字符串:

d = {k: ma_dict[k] if ma_dict[k] is not None else "" for k in ma_dict}
for k in d:
    print(k, d[k])
David Front
Mike Middle
Kate 
Lilly

【讨论】:

  • 谢谢!希望你不介意我选择了另一个答案,因为它的简单性并且来得更早。 :)
【解决方案2】:

灵感来自@masasa:

from collections import defaultdict

ma_dict = defaultdict(str)
ma_dict.update({"David" : "Front", "Mike" : "Middle"})

for each in ["David","Mike","Kate","Lilly"]:
    print (each, ma_dict[each])

打印出来:

David Front
Mike Middle
Kate 
Lilly 

【讨论】:

  • 希望我有时间获得这些积分:D
【解决方案3】:

我认为在这里使用if 是合适的,但如果你必须不要使用If 语句 不惜一切代价,那么就这样做

ma_dict = dict.fromkeys(["David","Mike","Kate","Lilly"])
ma_dict.update({"David" : "Front", "Mike" : "Middle"})
for each in ["David","Mike","Kate","Lilly"]:
    print(each, [ma_dict[each],""][ma_dict[each] is None])

输出

David Front
Mike Middle
Kate
Lilly

【讨论】:

  • 你为什么使用这种方法?
  • @juanpa.arrivillaga 每个 OP 要求 不使用 if 语句
【解决方案4】:

由于您不想使用if 条件并且正如@masasa 所建议的那样,您可以使用defaultdict

from collections import defaultdict
ma_dict = defaultdict.fromkeys(["David","Mike","Kate","Lilly"], '')
ma_dict.update({"David" : "Front", "Mike" : "Middle"})
for each in ["David","Mike","Kate","Lilly"]:
    print (each, ma_dict.get(each))
David Front
Mike Middle
Kate 
Lilly 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多