【问题标题】:Converting Dictionary to Sorted List of Tuples将字典转换为元组的排序列表
【发布时间】: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


【解决方案1】:

我认为您正在寻找的是:

def sort_contacts(diction):
    sorta = [(k, v[0], v[1]) for k,v in diction.items()]
    # sort it somehow? 
    return sorta

【讨论】:

    【解决方案2】:

    @Akaisteph7 谢谢你的回答。我通过 sorta.sort() 对其进行了排序,然后一切都正确通过了。

    这是最终代码:

    def sort_contacts(diction):
        sorta = [(k, v[0], v[1]) for k,v in diction.items()]
        sorta.sort() 
        return sorta
    

    谢谢大家!

    【讨论】:

      猜你喜欢
      • 2013-04-01
      • 1970-01-01
      • 2010-09-20
      • 2017-06-07
      相关资源
      最近更新 更多