首页 > 解决方案 > 遍历字典的值列表并从中删除

问题描述

因此,我抽象了一个我正在研究的项目,以测试如何从以列表为值的字典中添加和删除键和值。本质上,我有一个字典,它的键/值对是频道名称和频道中的用户列表。

我最终弄清楚了如何附加值特定键创建具有预期值的新键,但从具有值列表的字典中删除预期值似乎更困难。

我将快速描述有关此设计的一些快速细节,这些细节再次从项目中简化,用于测试目的,我猜只是时间。提示用户输入要从频道或频道列表中添加或删除的名称。格式是 JOIN/PART,后跟逗号分隔的“通道”列表。它看起来像加入#foo,#bar,#dog。对于测试符号实际上不是必需的,您也可以一次加入或离开 1 个频道。

我的问题出在 part() 函数中,我实际上无法找到一种方法来遍历通道以检测用户是否在通道中,然后将其从该通道中删除。

还有一个列表功能也用于测试目的,但非常简单地打印字典。

由于原始使用正则表达式来确保命令正确,我也没有对此进行错误检查,因此如果您脱离上述格式,它会破坏事情。

channels = {'#foo':['sean', 'john', 'tim'],
            '#bar':['sean', 'paul', 'tim'],
            '#cat':['paul', 'john', 'tim'],
            '#dog':['sam', 'john', 'tim']}

def part(name, channelNameList):
    for channelName in channelNameList:
        if channelName in channels:
            # if user is in the list remove them, else print user is not in list
            pass
        else:
            print("Channel {} does not exist")

def list():
    print(channels)

while True:
    name = input("Enter name: ")
    command = input("Enter command: ")
    
    if command == "list":
        list()
    else:
        removeCommand = command.split(" ", -1)
        params = removeCommand[1].split(",", -1)
        
        if removeCommand[0] == "PART":
            part(name, params)

标签: pythondictionaryiteration

解决方案


用于remove()从列表中删除元素。

def part(name, channelNameList):
    for channelName in channelNameList:
        if channelName in channels:
            try:
                channels[channelName].remove(name)
            except ValueError:
                print("User {} is not in {}".format(user, channelName)
        else:
            print("Channel {} does not exist")

推荐阅读