考虑以下字符串:
payments ='cash:yes,square_cash:no,venmo:no'
如果在字符串中找到“cash:yes”,我想返回“现金”。如果在字符串中找到“square_cash:yes”,我想返回“Square Cash”等等。
我认为我很接近,但无法弄明白。这是我的代码:
payments = 'cash:yes,square_cash:no,venmo:no'
def get_payment_type(x):
return {
x.find('cash:yes') !=-1: 'Cash',
x.find('square_cash:yes') !=-1: 'Square Cash',
x.find('venmo:yes') !=-1: 'Venmo'
}.get(x, 'not found') # default if x not found
return {'payment_used': get_payment_type(payments) }
这总是返回“未找到”,所以我知道我的语法已关闭,只是不确定在哪里。
答案 0 :(得分:1)
要处理任意输入,请使用正则表达式捕获所需的付款类型,然后如果完整付款字符串中存在该类型,请将re.findall
找到的部分大写:
import re
payment_types = {'cash:yes,square_cash:no,venmo:no':"cash:yes", 'cash:yes,square_cash:yes,venmo:no':"square_cash:yes"}
final_type = {a:' '.join(i.capitalize() for i in re.findall('^[a-zA-Z_]+(?=:)', b)[0].split('_')) if b in a else None for a, b in payment_types.items()}
输出:
{'cash:yes,square_cash:yes,venmo:no': 'Square Cash', 'cash:yes,square_cash:no,venmo:no': 'Cash'}
答案 1 :(得分:1)
此处您的具体错误是反转字典键和值。
dict.get
查找密钥,密钥首先出现在dict语法中:
{"key": "value"}
因此,如果您在答案中反转键和值,它可能会起作用。
但是,我建议进行一些更改:
x in y
代替y.find(x) != -1
以下是使用if的例子,而不是:
if "square_cash:yes" in payments:
return "square_cash"
elif "cash:yes" in payments:
return "Cash"
elif "venmo:yes" in payments:
return "Venmo"
else:
return "not found"
以下是如何将其解析为字典的快速草图:
result = {}
for element in payments.split(","):
key, value = element.split(":")
result[key] = value
答案 2 :(得分:0)
用逗号分割字符串然后使用你可以使用in
检查字符串是否为列表。
<强>实施例强>
payments = 'cash:no,square_cash:yes,venmo:no'.split(",")
if "cash:yes" in payments:
print('Cash')
elif "square_cash:yes" in payments:
print("square_cash")
elif "venmo:yes" in payments:
print("Venmo")
else:
print("not found")