Python 使用字符串拆分的列表理解
以下代码接受两个输入,Python 使用字符串拆分的列表理解,python,python-3.x,Python,Python 3.x,以下代码接受两个输入,商品名称和销售类型。它将查看item_dict,以查找是否有任何键包含item_name的一部分或与之完全匹配,并输出值 我正在尝试将以下for循环转换为列表理解。我对基本列表的理解相当满意,但在这种情况下,我要求拆分文本并获得相关结果。我不确定我所要求的是否可能 item_name = "GalaxyDevices" sale_type = "buy" item_dict = {"buy_Galaxy": [11
商品名称
和销售类型
。它将查看item_dict
,以查找是否有任何键包含item_name
的一部分或与之完全匹配,并输出值
我正在尝试将以下for循环
转换为列表理解。我对基本列表的理解相当满意,但在这种情况下,我要求拆分文本并获得相关结果。我不确定我所要求的是否可能
item_name = "GalaxyDevices"
sale_type = "buy"
item_dict = {"buy_Galaxy": [11111, 2232], "sell_Galaxy": [2111]}
results = []
for key, value in item_dict.items():
key = key.split("_")
if key[0] != sale_type:
continue
if key[1] in item_name:
results.extend(value)
print(results)
输入/输出:
item_name = "GalaxyDevices"
sale_type = "buy"
>>> [11111, 2232]
我失败的尝试:
results = [value.split("_") for key, value in item_dict.items()]
非常感谢 使用嵌套列表理解和
设置
来确定是否有交集
然而,这需要3条规则:
- 名称有某种分隔符-CamelCase分隔需要
re
- 每个名称的一部分不应与
中的任何名称匹配。i、 e.dict
同时匹配Hello\u world
和Hello\u buy
,以获得最佳效果world\u buy
name=input(“name>>”)
类型=输入(“交易类型>>”)
结果=[item_dict[key]for key in[key_uufor key_uuin item_dict.keys()如果type_uin key_uu]如果设置(name.split())&设置(key.split(“u”)]
解释 以上等于:
intersecting_words = lambda name_, keys_: set(name) & set(keys_)
key_matching_part = [key for key in item_dict.keys() if intersecting_words(name, key.split("_"))]
results = [item_dict[key] for key in key_matching_part]
全面测试:
item_dict = {"Guido_buy": 100, "Guido_sell": -100,
"Ramalho_buy": 200, "Ramalho_sell": -200}
name = "Guido van Rossum"
type_ = "buy"
results = [item_dict[key] for key in [key_ for key_ in item_dict.keys() if type_ in key_] if set(name.split()) & set(key.split("_"))]
print(results)
name = "Luciano Ramalho"
type_ = "sell"
results = [item_dict[key] for key in [key_ for key_ in item_dict.keys() if type_ in key_] if set(name.split()) & set(key.split("_"))]
print(results)
输出:
[100]
[-200]
使用嵌套列表理解和
set
来确定是否有交叉点
然而,这需要3条规则:
- 名称有某种分隔符-CamelCase分隔需要
re
- 每个名称的一部分不应与
中的任何名称匹配。i、 e.dict
同时匹配Hello\u world
和Hello\u buy
,以获得最佳效果world\u buy
name=input(“name>>”)
类型=输入(“交易类型>>”)
结果=[item_dict[key]for key in[key_uufor key_uuin item_dict.keys()如果type_uin key_uu]如果设置(name.split())&设置(key.split(“u”)]
解释 以上等于:
intersecting_words = lambda name_, keys_: set(name) & set(keys_)
key_matching_part = [key for key in item_dict.keys() if intersecting_words(name, key.split("_"))]
results = [item_dict[key] for key in key_matching_part]
全面测试:
item_dict = {"Guido_buy": 100, "Guido_sell": -100,
"Ramalho_buy": 200, "Ramalho_sell": -200}
name = "Guido van Rossum"
type_ = "buy"
results = [item_dict[key] for key in [key_ for key_ in item_dict.keys() if type_ in key_] if set(name.split()) & set(key.split("_"))]
print(results)
name = "Luciano Ramalho"
type_ = "sell"
results = [item_dict[key] for key in [key_ for key_ in item_dict.keys() if type_ in key_] if set(name.split()) & set(key.split("_"))]
print(results)
输出:
[100]
[-200]
我认为这应该奏效:
results = [
value
for key, values in item_dict.items()
if (key.split('_')[0] == sale_type
and key.split('_')[1] in item_name)
for value in values
]
我认为这应该奏效:
results = [
value
for key, values in item_dict.items()
if (key.split('_')[0] == sale_type
and key.split('_')[1] in item_name)
for value in values
]
那太复杂了!这就是OP要求的,不是吗?OP明确提到他/她希望获得2个输入-名称和交易类型。这是最简单但最短的答案。我喜欢这里的答案,但它只是缺少了项目名称,它可以像我的“galaxydevices”示例中的包含匹配一样,字典中有“buy\u galaxy”,可以找到它。如果我只输入完整的项目名称,这就行了。是的,我已经从您的描述中了解到,您也需要处理
项目名称
。仅从提供的代码中可以看出。我认为您需要使用一些分隔符来分隔项目名称
,而无需借助re
。不能使用listcomp
,但可以使用函数。如果可能的话,我会相应地更新那个案例的答案。那个太复杂了!这就是OP要求的,不是吗?OP明确提到他/她希望获得2个输入-名称和交易类型。这是最简单但最短的答案。我喜欢这里的答案,但它只是缺少了项目名称,它可以像我的“galaxydevices”示例中的包含匹配一样,字典中有“buy\u galaxy”,可以找到它。如果我只输入完整的项目名称,这就行了。是的,我已经从您的描述中了解到,您也需要处理项目名称
。仅从提供的代码中可以看出。我认为您需要使用一些分隔符来分隔项目名称
,而无需借助re
。不能使用listcomp
,但可以使用函数。如果可能的话,我会相应地更新答案。这很简单,但我不明白为什么最后一行需要值?否则你会得到一个列表列表作为回报。我很喜欢这个解决方案,但最后一部分是在玩弄我的大脑。最后一个for值是否属于if语句?或者它是使用第一个for循环作为嵌套吗?不完全是这样:它只在满足条件时执行。编辑:对不起,我还没有读到你的第二个问题:它使用第一个作为嵌套,但只有在满足条件时才使用。注意,你有什么参考资料可以让我了解更多吗?这很好,但我不明白为什么最后一行需要值?否则你会得到一个列表作为回报。我很喜欢这个解决方案,但最后一部分是在玩弄我的大脑。最后一个for值是否属于if语句?或者它是使用第一个for循环作为嵌套吗?不完全是这样:它只在满足条件时执行。编辑:对不起,我还没有读到你的第二个问题:它正在使用第一个作为嵌套,但只有在满足条件时才使用。注意,你有任何参考资料,我可以从中了解更多信息吗?