python - 多次返回单个变量(不是列表)以从第二个函数起作用?
问题描述
我有第一个无法修改或更改的功能!它显示变量的值(main_index
字段不能是列表、元组、字典等。它很简单,只是一个变量,必须保持原样)
该函数触发第二个函数,该函数可以返回多个值,因此想法是以某种方式一个一个地显示这些多个值,但不将它们放入列表或字典中。等等。可以以任何方式更改第二个功能。
代码如下(请注意第一个函数不能以任何方式修改,我这里只是简化一下)。
def not_changeable():
value_to_check='7.1'
main_index=generate_index(value_to_check)
print (main_index)
def generate_index(index):
dictionary={'7.1.1':{'value':'1'},'7.1.2':{'value':'2'},'7.100.3':{'value':'3'}}
filtered_dict={}
concatanatedIndex=index+'.'
for k in dictionary.keys():
if concatanatedIndex in k:
filtered_dict[k]=dictionary[k]
print (filtered_dict)
for indx in filtered_dict:
return (filtered_dict.get(indx).get('value'))
not_changeable()
作为输出,我得到一个值(因为返回函数结束了脚本)
{'7.1.1': {'value': '1'}, '7.1.2': {'value': '2'}}
1
但我想获得价值
1
2
无需对第一个功能进行任何修改。
我知道如果我返回列表,我将能够显示所有值,但是是否可以在不修改第一个函数的情况下显示 1 和 2?
解决方案
在 for 循环中返回通常不是您想要的,最好在循环中构建数据结构然后稍后返回,或者返回整个数据结构,因为它是在理解中构建的。在这里,您可以返回带有换行符而不是值的字符串,如下所示:
def generate_index(index):
dictionary={'7.1.1':{'value':'1'},'7.1.2':{'value':'2'},'7.100.3':{'value':'3'}}
filtered_dict={}
concatanatedIndex=index+'.'
for k in dictionary.keys():
if concatanatedIndex in k:
filtered_dict[k]=dictionary[k]
print (filtered_dict)
return '\n'.join(sorted(filtered_dict.get(indx).get('value') for indx in filtered_dict))
这将打印
{'7.1.2': {'value': '2'}, '7.1.1': {'value': '1'}}
1
2
最后一条语句的细分'\n'.join(sorted(filtered_dict.get(indx).get('value') for indx in filtered_dict))
::
- 我们使用推导来生成我们感兴趣的数据:
filtered_dict.get(indx).get('value') for indx in filtered_dict
- 这实际上是一个生成推导,但您可以将[]
其设为列表推导。 - 因为我们正在迭代字典,并且字典不能保证按特定顺序排列(尽管我相信这在 Python 3.6 中有所改变),所以我添加了
sorted
调用以确保1
在2
. - 要将可迭代(如列表)转换为字符串,我们可以使用 string 方法
.join()
,该方法通过将列表中的元素连接在一起并将字符串放在每个元素之间来创建字符串。所以'-hello-'.join(['a', 'b', 'c'])
会变成'a-hello-b-hello-c'
。
实际上,构建返回字符串的更简单方法是迭代 dict.values() 而不是实际的 dict。如果我们使用 python 版本 > 3.6,我们可以跳过sorted
调用,所以返回简单地变成:return '\n'.join(v.get('value') for v in filtered_dict.values())
。
但更好的设计可能是返回字典中的值,并在一个单独的函数中以特定格式打印它们,该函数只负责显示。
推荐阅读
- xslt - 提取部分输入字符串
- c# - DataTemplate 未正确绑定
- java - 多数据库连接 JPA
- ios - iOS14 中的 UIViewControllerRepresentable 和属性包装器行为,与 CropViewController 一起使用
- android - 是否可以为 Android 上的 Outlook Mobile 构建针对本地 Exchange 部署运行的 Outlook 插件
- node.js - 找不到“AppModule”Angular 10 的 NgModule 元数据中的错误
- google-chrome-extension - Chrome 扩展新手问题 - 检查网页是否有条目,单击超链接并刷新
- visual-studio - Visual Studio -> 代码样式首选项:无严重性不存在
- javascript - Unicode Aware String.split('') 不使用 ES6 或 ES5
- java - 将结果 ResultInfo{who=null, request=65538, result=-1, data=null} 传递给活动失败