Python 遍历字典的值列表并从中删除
因此,我提取了一个项目,测试如何从以列表为值的字典中添加和删除键和值。基本上,我有一个字典,它的键/值对是通道名和通道中的用户列表 我最终弄明白了如何在特定键上附加值创建具有预期值的新键,但从具有值列表的字典中删除预期值似乎更困难 我将很快地描述一些关于这个设计的快速细节,为了测试的目的,这个设计再次从项目中简化了,我猜是时候了。系统将提示用户输入要从频道或频道列表中添加或删除的名称。格式为JOIN/PART,后跟逗号分隔的“通道”列表。它看起来像是JOIN#foo、#bar、#dog。对于测试,实际上并不需要符号,您也可以一次加入或退出一个通道 我的问题是在part()函数中,我很难找到一种方法来迭代通道,以检测用户是否在通道中,然后将其从该通道中删除 还有一个列表函数也用于测试,但只需打印字典即可 我也没有真正的错误检查,因为最初使用regex来确保命令是正确的,所以如果您脱离上面描述的格式,它将很容易破坏Python 遍历字典的值列表并从中删除,python,dictionary,iteration,Python,Dictionary,Iteration,因此,我提取了一个项目,测试如何从以列表为值的字典中添加和删除键和值。基本上,我有一个字典,它的键/值对是通道名和通道中的用户列表 我最终弄明白了如何在特定键上附加值创建具有预期值的新键,但从具有值列表的字典中删除预期值似乎更困难 我将很快地描述一些关于这个设计的快速细节,为了测试的目的,这个设计再次从项目中简化了,我猜是时候了。系统将提示用户输入要从频道或频道列表中添加或删除的名称。格式为JOIN/PART,后跟逗号分隔的“通道”列表。它看起来像是JOIN#foo、#bar、#dog。对于测试
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]