Python将列表转换为字典
我正在尝试编写一个函数,它接受包含名称和字符串的字符串列表 标记为参数。并返回一个字典(mark,[获得该标记的姓名列表]) 例如:Python将列表转换为字典,python,list,dictionary,Python,List,Dictionary,我正在尝试编写一个函数,它接受包含名称和字符串的字符串列表 标记为参数。并返回一个字典(mark,[获得该标记的姓名列表]) 例如: def example(["John,5", "Jessica,5", "Jack,7"]): 返回: {'5' : ["John", "Jessica"], '7' : "Jack"} 我发现这是一个棘手的问题。。。我如何使用split(',')解决这个问题 这就是我到目前为止所做的: def create_marks_dict(my_list):
def example(["John,5", "Jessica,5", "Jack,7"]):
返回:
{'5' : ["John", "Jessica"], '7' : "Jack"}
我发现这是一个棘手的问题。。。我如何使用split(',')解决这个问题
这就是我到目前为止所做的:
def create_marks_dict(my_list):
dictionary = {}
for name in my_list:
if name not in dictionary:
dictionary[name]
return dictionary
您需要使用集合中的defaultdict来使用字典中的列表
from collections import defaultdict
def create_marks_dict(my_list):
dictionary = defaultdict(list)
for item in my_list:
name, marks=item.split(',')
dictionary[marks].append(name)
return dictionary
输出:
{'5' : ["John", "Jessica"], '7' : "Jack"}
如果需要输出dict
而不是defaultdict
,则您可以在返回时强制转换字典
return dict(dictionary)
您需要使用集合中的defaultdict来使用字典中的列表
from collections import defaultdict
def create_marks_dict(my_list):
dictionary = defaultdict(list)
for item in my_list:
name, marks=item.split(',')
dictionary[marks].append(name)
return dictionary
输出:
{'5' : ["John", "Jessica"], '7' : "Jack"}
如果需要输出dict
而不是defaultdict
,则您可以在返回时强制转换字典
return dict(dictionary)
您需要使用collections.defaultdict:
from collections import defaultdict
marksdict = defaultdict(list)
for entry in ["John,5", "Jessica,5", "Jack,7"]:
name,mark = entry.split(',')
marksdict[mark].append(name)
print marksdict
您需要使用collections.defaultdict:
from collections import defaultdict
marksdict = defaultdict(list)
for entry in ["John,5", "Jessica,5", "Jack,7"]:
name,mark = entry.split(',')
marksdict[mark].append(name)
print marksdict
这是使用普通python字典的版本:
def get_dict(nm_list):
d = {}
for n, m in [(name, mark) for (name, mark) in \
tuple([nm.split(',') for nm in nm_list])]:
d[m] = [n] if m not in d else d[m]+[n]
return d
la = ['John,5', 'Jessica,5', 'Jack,7']
d = get_dict(la)
print d
输出为:{'5':['John','Jessica'],'7':['Jack']}这是使用普通python字典的版本:
def get_dict(nm_list):
d = {}
for n, m in [(name, mark) for (name, mark) in \
tuple([nm.split(',') for nm in nm_list])]:
d[m] = [n] if m not in d else d[m]+[n]
return d
la = ['John,5', 'Jessica,5', 'Jack,7']
d = get_dict(la)
print d
输出是:{'5':['John','Jessica'],'7':['Jack']}您基本上会得到的是,但是使用
key,value=item.split(“,”)
定义示例(['John,5”,“Jessica,5”,“Jack,7”]):
是无效语法。您确定要{'5':['John Jessica'],'7':'Jack'}
而不是{'5':['John吗,“Jessica”],“7':[“Jack”]}
?基本上你会得到一个重发,但是使用key,value=item.split(“,”)
,def示例([“John,5”,“Jessica,5”,“Jack,7”]):
是无效语法。你确定要{5':[“John”,“Jessica”],“7':“Jack
,而不是{5':[“John”,“Jessica”],“Jack 7”:
?有没有一种方法可以使输出不带有defaultdict(,
)?如果函数调用是print create\u marks\u dict(…)
且其输出是defaultdict(,{…}),则可以将其转换为经典的方法:dict(defaultdict(…)
,那么如果你想像普通字典一样打印它,你可以使用打印dict(create_marks_dict(…)
@AshokaLella你确定输出吗?我宁愿认为Jack
本身也在一个列表中,比如{'5':['John','Jessica','7':[“Jack”]}
…有没有一种方法可以使输出不具有defaultdict(,
?您可以将其转换为经典的:dict(defaultdict(…)
如果函数调用是print create_marks_dict(…)
并且其输出是defaultdict(,{…})
,那么如果你想像普通字典一样打印它,你可以使用打印dict(create_marks_dict(…)
@AshokaLella你确定输出吗?我宁愿认为Jack
本身也在一个列表中,比如{'5':['John','Jessica','7':[“Jack”]}
…如果我有3个带有、5个,我可能会以类似[[['John'、'Jessica']和'Jacob'的东西结尾
使用此代码。这可能是不需要的。是的,这是真的,谢谢你指出。你能建议改进列表理解吗?很难说。我会使用defaultdict
方法,并接受即使是单个条目(如Jack
此处)也在一个列表中。我相信它毕竟更容易处理…如果列表中允许单个条目而不是字符串,我可以使用列表理解来完成。我相应地更改了代码。这违反了Python的核心原则:它不可读,变量和方法名没有意义,存在不必要的行继续和一个不必要的三元运算符。将其与所选答案进行比较,了解如何正确操作。如果我有3个带有,5
,我可能会以类似[['John','Jessica','Jacob']的内容结尾
使用此代码。这可能是不需要的。是的,这是真的,谢谢你指出。你能建议改进列表理解吗?很难说。我会使用defaultdict
方法,并接受即使是单个条目(如Jack
此处)也在一个列表中。我相信它毕竟更容易处理…如果列表中允许单个条目而不是字符串,我可以使用列表理解来完成。我相应地更改了代码。这违反了Python的核心原则:它不可读,变量和方法名没有意义,存在不必要的行继续和一个不必要的三元运算符。将其与所选答案进行比较,了解如何正确执行。