由于我无法理解这一行代码,因此如何将一个行代码分成多个描述行。
data = formatted_data + "|" + '|'.join(["{}".format(a) for b, a in sorted(values.items()) if a and b not in ['SecureHash']])
这是正确的还是没有人帮助我
for b, a in sorted(values.items()):
if a and b not in ['SecureHash']:
c = ["{}".format(a)]
data = formatted_data + "|" + "|".join(c)
答案 0 :(得分:2)
这段代码正在收集a
的字符串表示形式,然后用它构建另一个字符串。
您需要定义一个外部列表,以说明列表理解表达式。
c = ["{}".format(a) for b, a in sorted(values.items()) if a and b not in ['SecureHash']]
进一步,要分解c
的组装方式,可以扩展列表理解:
c = []
for b, a in sorted(values.items()):
if a and b not in ['SecureHash']:
c.append('{}'.format(a))
最后,只需结合三个部分:
data = formatted_data + "|" + "|".join(c)
答案 1 :(得分:1)
好吧,通常您可以在字符串中看到任何左括号和加号运算符作为“断点”。使用您的示例:
data = formatted_data
data += "|"
data += '|'.join(["{}".format(a) for b, a in sorted(values.items()) if a and b
not in ['SecureHash']])
好,所以现在我们需要解开该联接中发生的事情:
data = formatted_data
data += "|"
jointmp = ["{}".format(a) for b, a in sorted(values.items()) if a and b not in ['SecureHash']]
data += '|'.join(jointmp)
好,所以我们有了一些字符串格式和一些列表理解:
data = formatted_data
data += "|"
jointmp = []
for b, a in sorted(values.items()):
if a and b not in ['SecureHash']:
jointmp += ["{}".format(a)] # Equivalent to str(a) ?
data += '|'.join(jointmp)
要做到最后一个阶段,要追溯到很多事情,并且随着事情的发展。那些列表理解很简洁...
但是这里有一些问题:
values
来自哪里?"{}".format(a)
的用途是什么?等
您的“扩展”代码并不完全等效,因为您无法处理没有匹配项/ values
为空并且每次替换data
而不是增长它的情况。< / p>
答案 2 :(得分:-1)
您可能想阅读list comprehensions。
基本上,它列出了这样的内容:
[item for item in iterable_thing]
因此,这是一个字符串列表("{}".format(a)
)。我假设a
是一个散列,但我们假装它是一个范围内的数字:
["{}".format(a) for a in range(5)]
将使:
>>>['0', '1', '2', '3', '4']
通过添加if
语句,理解可能会变得非常复杂,似乎写此代码的人就是那些a in b in i in j
类人之一,因此,他们的代码很难遵循。好的变量名非常重要。