python - 从字典中弹出完全相同的值
问题描述
我有一个包含信息的一般列表:
lis = ["Hello", "Hello1", "Test"]
然后我有一个字典,其中包含 .c 文件的文件路径作为值和键是 lis 值的扩展,例如:
dict1 = {"/****Hello****/":
["C://test/hello/one.c",
"C://test/hello/two.c"],
"/****Hello1****/":
["C://test/helloNext/one.c",
"C://test/helloNext/two.c"],
"/****Test****/":
["C://test/bye/one.c",
"C://test/bye/two.c"]}
这个想法是用 lis 的值替换 dict1 的键,如果 lis 的值在键信息中。
for x in lis:
for y in dict1.copy():
if x in y:
dict1[x] = dict1.pop(y)
就目前而言,但现在我发现了一个大问题:
如果我这样做,则 dict1 的某些信息将被覆盖,因为在此示例中,它会搜索其中包含“Hello”的键并覆盖 dict1[0],但也会将 dict1[1] 覆盖为“Hello”而不是“Hello1” “因为这是第一个信息...
我自己无法找到解决方案。我想我只是错过了一点......
谢谢!
PS:仅仅从键中删除特殊字符不是解决方案,因为每个文件看起来都不一样。
解决方案
一种方法是根据元素的长度对列表进行排序并以相反的顺序对其进行处理:
lis = ["Hello", "Hello1", "Test"]
dict1 = {"/****Hello****/": ["C://test/hello/one.c", "C://test/hello/two.c"],
"/****Hello1****/": ["C://test/helloNext/one.c", "C://test/helloNext/two.c"],
"/****Test****/": ["C://test/bye/one.c", "C://test/bye/two.c"]}
for x in sorted(lis, key=len, reverse=True):
for y in dict1:
if x in y and y not in lis:
dict1[x] = dict1.pop(y)
break
print(dict1)
# {'Hello1': ['C://test/helloNext/one.c', 'C://test/helloNext/two.c'], 'Hello': ['C://test/hello/one.c', 'C://test/hello/two.c'], 'Test': ['C://test/bye/one.c', 'C://test/bye/two.c']}
推荐阅读
- java - Java流从集合中获取单个元素
- firebase - 如何将 Firebase 集合中的文档转换为地图(在 Flutter 中)?
- php - 使用 laravel 获取最后 2 行输入的 SUM
- flutter - 转换地图
列出 扑腾,飞镖 - java - Amazon Rekognition NoSuchFieldError - Android Studio
- c# - 为什么我为方法'ActionResult DisplaySearchResults()的不可空类型'System.Int32'的参数'CarLotID'获得空条目
- flutter - StatefulBuilder:为什么不支持 init/dispose
- c++ - 从具有固定数组大小的基类指针访问派生类
- html - 所有 wix 托管图像(图像 url)都不会在移动版本上显示,但在桌面上可以完美运行?如何进行?
- android - 媒体播放器在后台