【发布时间】:2019-08-10 13:06:58
【问题描述】:
所以我试图将字典转换为包含元组的排序列表。我已经能够将字典转换为排序列表没问题。我的问题是从键和相应的值中创建一个元组,然后将其传递到排序列表中。
我尝试将字典转换为排序列表(这在技术上有效,但元组似乎是列表中的一个单独实体)。
然后我尝试将密钥和所有值分开并用 for 语句将它们缝合在一起,但我已经花了足够的时间在这上面,因为我只是被阻塞并且看不出它为什么会获胜不通过。
以下是我尝试创建的两个函数:
#function #1
def sort_contacts(diction):
my_key_list = list(diction.keys())
my_val_list = list(diction.values())
for x in range(0,len(my_key_list)):
for k in my_key_list:
for x,v in my_val_list:
new_val=(k, x, v)
new_list=[new_val]
return(new_list)
#function #2
def sort_contacts(diction):
sorta = [(k,v) for k,v in diction.items()]
sorta = list(sorta)
sorta.sorta
#sortc = sortb.split()
return sorta
对于功能 #1,测试失败。
预期:
[('Freud, Anna', '1-541-754-3010', 'anna@psychoanalysis.com'), ('Horney, Karen', '1-541-656-3010', 'karen@psychoanalysis.com'), ('Welles, Orson', '1-312-720-8888', 'orson@notlive.com')]
但是得到了:
[('Freud, Anna', '1-541-754-3010', 'anna@psychoanalysis.com')]
对于功能 #2,测试失败。
预期:
[('Freud, Anna', '1-541-754-3010', 'anna@psychoanalysis.com'), ('Horney, Karen', '1-541-656-3010', 'karen@psychoanalysis.com'), ('Welles, Orson', '1-312-720-8888', 'orson@notlive.com')]
但是得到了:
[('Freud, Anna', ('1-541-754-3010', 'anna@psychoanalysis.com')), ('Horney, Karen', ('1-541-656-3010', 'karen@psychoanalysis.com')), ('Welles, Orson', ('1-312-720-8888', 'orson@notlive.com'))]
【问题讨论】:
-
请贴出字典原文
-
好的,所以第二个函数给出了更好的结果(虽然我不确定
sorta.sorta应该做什么;应该是sorta.sort()吗?)。现在您需要将['string', ('some', 'tuple')]转换为['string', 'some', 'tuple']。你能做到吗? -
正如@ForceBru 指出的那样,
sorta.sort不起作用,因为它不调用排序函数。您需要使用sorta.sort()对列表进行排序。当您使用sorta.sort时,它只会返回内置类<class 'builtin_function_or_method'>,因此不会对列表执行任何操作。它是一个函数,必须按照正确的函数调用语法来调用它:函数名后跟括号 -
1)
sorta = list(sorta)是多余的,因为它已经是一个列表。 2)sorta = list(diction.items())就够了;列表理解是不必要的。 -
在第一个函数中,
new_list=[new_val]这会覆盖以前的值。也许使用new_list.append(new_val)会更好。在第二个函数中,我假设你的字典有一个元组,即:"name": ("some", "truple", "tuple")。所以第二个功能是做被告知的事情。您必须将这些字符串从元组中取出。
标签: python dictionary tuples sortedlist