python - 遍历字典的值列表并从中删除
问题描述
因此,我抽象了一个我正在研究的项目,以测试如何从以列表为值的字典中添加和删除键和值。本质上,我有一个字典,它的键/值对是频道名称和频道中的用户列表。
我最终弄清楚了如何附加值特定键创建具有预期值的新键,但从具有值列表的字典中删除预期值似乎更困难。
我将快速描述有关此设计的一些快速细节,这些细节再次从项目中简化,用于测试目的,我猜只是时间。提示用户输入要从频道或频道列表中添加或删除的名称。格式是 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)
解决方案
用于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")
推荐阅读
- javascript - 如何仅在道具更新后运行 onSubmit={} ?
- android - Android Camera2:使用 captureBurst 的图像捕获之间的更新 UI 不同步
- java - 我的递归列表的前置函数创建了一个无限列表
- android - 如何在按钮按下时使用可绘制动画
- google-apps-script - Google Apps 脚本的特定于部署的配置
- java - 在 Morphia createQuery 方法中传递集合名称是一种好习惯吗?
- reactjs - React Redux Watson 聊天机器人状态问题
- python - 如何在python中使用opencv从sftp位置读取视频文件
- xaml - 当我们通过资源将 ListView 与 DataTemplate 一起使用时,绑定不起作用。(MVVM)
- python - 将字符串值转换为 numpy 数组