使用Python字典返回共享值

2024-10-04 09:26:31 发布

您现在位置:Python中文网/ 问答频道 /正文

当我给python字典一个文本字符串时,我需要一些帮助来提取公共(共享)值。在

例如,假设我有一个文本字符串,例如:

mylist = ["shirt","pants","shoes","tie","jacket"]

我还使用dict()函数在字典中列出了一些品牌:

^{pr2}$

我需要我的函数来返回一个公共品牌列表(任意两个共同点),其中一个给定的品牌至少有我原始列表中的两个类别。 所以对于: mylist=['衬衫','鞋子','领带','夹克']

someFunction(mylist)

退货:

[‘Zara’,’Banana_Republic’,’Alfani’,’Nike’]

一开始我试着写一个forloop,它基本上是:

brandDictionary = dict(brands)

def mappings(list, dictionary):
for category in list:
    return dictionary[category]

但这只返回一个值,我需要值的字符串

所以:

mappings(mylist, brandDictionary)

给我:

['Banana_Republic']

而不是我要找的全部名单:

[‘Zara’,’Banana_Republic’,’Alfani’,’Nike’]

还请注意,在$mylist中,我的字典中没有存储“裤子”。这个函数应该只返回我在字典中匹配的值,而不返回错误。在


Tags: 函数字符串文本列表字典dictmappingsbanana
3条回答

这可以实现collections.Counter。确保字典的结构不会出现重复键错误。在

from collections import Counter

clothing_map = {
    'Zara': ['shoes', 'shirt'],
    'GAP': ['shirt'],
    'Old_Navy': ['shirt'],
    'Banana_Republic': ['shoes', 'shirt'],
    'Zenga': ['shoes'],
    'Nike': ['jacket', 'shoes'],
    'Adidas': ['shoes'],
    'Hermes': ['tie'],
    'Ferragamo': ['tie'],
    'Alfani': ['jacket', 'tie'],
    'Under_Armour': ['jacket'],
    'Polo': ['jacket'],
    'The_North_Face': ['jacket']
}

def get_brands(items = []):
    l = [key for key, val in clothing_map.items() for x in items if x in val]
    return [key for key, val in Counter(l).items() if val > 1]

mylist = ['shirt', 'pants', 'shoes', 'tie', 'jacket']
print(get_brands(mylist))
#['Alfani', 'Nike', 'Zara', 'Banana_Republic']

你不能像前面提到的那样,直接把这个列表变成字典。在

但是,您可以构建一个值为列表或集合的字典,例如

{
"tie": ["Hermes", "Ferragamo", "Alfani"]
...
}

更好的是,构建一个键和值颠倒的字典,例如:

^{pr2}$

如果您对set对象很熟悉,那么可以使以后的处理变得非常短:将字典值和输入搜索目标(您在顶部给出的mylist相交),然后查看结果集的长度是否至少为2。在

对于“裤子”,只要加上一张支票

if item in mydict.keys()

正如我在评论python字典do not support duplicated keys中所说的。在

记住这一点:

也许有一种更直接、更像Python的方法。 如果我没弄错你的问题,这就是你想要的:

脚本

mylist = ["shirt","pants","shoes","tie","jacket"]

str_data ="""shirt Zara
shirt GAP
shirt Old Navy
shirt Banana_Republic
shoes Banana_Republic
shoes Zenga
shoes Zara
shoes Nike
shoes Adidas
tie Hermes
tie Ferragamo
tie Alfani
jacket Alfani
jacket Under_Armour
jacket Nike
jacket Polo
jacket The_North_Face"""

#dict list
data_dicts = [{line.split()[1]: line.split()[0]} for line in str_data.split("\n")]

clothes_matches = {}

#turn into a single dictionary
for data_dict in data_dicts:
    for key, value in data_dict.items():
        try:
            clothes_matches[key].append(value)
        except KeyError:
            clothes_matches[key] = [value]

#count the number of o occurrences for each brand
result = []
for key,value in clothes_matches.items():
    if len(value) >= 2:
        result.append(key)

print(result)

输出

^{pr2}$

希望这有帮助!:)

相关问题 更多 >