Python 遍历字典的值列表并从中删除

Python 遍历字典的值列表并从中删除,python,dictionary,iteration,Python,Dictionary,Iteration,因此,我提取了一个项目,测试如何从以列表为值的字典中添加和删除键和值。基本上,我有一个字典,它的键/值对是通道名和通道中的用户列表 我最终弄明白了如何在特定键上附加值创建具有预期值的新键,但从具有值列表的字典中删除预期值似乎更困难 我将很快地描述一些关于这个设计的快速细节,为了测试的目的,这个设计再次从项目中简化了,我猜是时候了。系统将提示用户输入要从频道或频道列表中添加或删除的名称。格式为JOIN/PART,后跟逗号分隔的“通道”列表。它看起来像是JOIN#foo、#bar、#dog。对于测试

因此,我提取了一个项目,测试如何从以列表为值的字典中添加和删除键和值。基本上,我有一个字典,它的键/值对是通道名和通道中的用户列表

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

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

我的问题是在part()函数中,我很难找到一种方法来迭代通道,以检测用户是否在通道中,然后将其从该通道中删除

还有一个列表函数也用于测试,但只需打印字典即可

我也没有真正的错误检查,因为最初使用regex来确保命令是正确的,所以如果您脱离上面描述的格式,它将很容易破坏

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)
使用
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")

在您的
part()
函数中,
channelNameList
初始化为什么?哦,很抱歉,这是以前尝试的产物,为了清楚起见,我会立即更改它@redcricket它的设置与join()相同函数调用传递给channelNameList的参数,只是因为它看起来比params更清晰,但我忘记了更改该函数的名称。您不需要使用
any()
来检查列表中是否有项。使用
如果频道中的用户[channelName]:
谢谢@Barmar,我刚刚意识到,在有人发布了关于删除的帖子之后,我已经严重地过度复杂化了。我认为删除会做一些完全不同的事情,所以我早些时候取消了它作为选项的资格。我认为你把它与
del channels[channelName]