【问题标题】:How to extract data from two different lists如何从两个不同的列表中提取数据
【发布时间】:2023-04-01 23:13:02
【问题描述】:

我有两个不同的列表,我需要根据它们的名称从它们中提取数据,然后将它们相乘。

我有这个列表:

query_tfidf = [0.8465735902799727, 0.8465735902799727]
documents_query = [['Aftonbladet', 'play', 0.0], ['Aftonbladet', 'free', 0.0],
 ['Radiosporten Play', 'play', 0.10769448286014331], ['Radiosporten Play', 'free', 0.0]]

我需要根据他们的名字对它们进行排序,例如:

{Aftonbladet: {play: 0.0, free: 0.0}, Radiosporten Play: {play: 0.10769448286014331, free: 0.0}

然后我需要从每个中提取数据并乘以 query_tfidf 并计算两个变量。例如:

for each name:
    dot_product = (play_value * query_tfidf[0]) + (free_value * query_tfidf[1])
    query = sqrt((query_tfidf[0])^2 + (query_tfidf[1])^2)
    document = sqrt((play_value)^2 + (free_value)^2)

我有点绝望,所以我想在这里问一下。我正在使用 python 2.7。

【问题讨论】:

  • documents_query 总是会像那样有序地进来吗? [key1, 'play', val], [key1, 'free', val], [key2, 'play, val], ...?
  • 是的,还是一样的顺序,但是那些“play”或者“free”是关键词,所以可以改名字。

标签: python list extract


【解决方案1】:

使用字典根据名称和关键字对 documents_query 中的条目进行排序非常简单:

indexedValues = {}
for entry in documents_query:
    if entry[0] not in indexedValues:
        indexedValues[entry[0]] = {}
    indexedValues[entry[0]][entry[1]] = entry[2]

这会给你indexedValues,看起来像你要求的:

{'Aftonbladet': {'play': 0.0, 'free': 0.0}, 'Radiosporten Play': {'play': 0.10769448286014331, 'free': 0.0}

【讨论】:

    【解决方案2】:

    使用collections.defaultdict 汇总您的数据

    from collections import defaultdict
    
    results = defaultdict(dict)
    for main_key, key, value in documents_query:
        results[main_key][key] = value
    
    # dict(results)
    # Out[16]: 
    # {'Aftonbladet': {'free': 0.0, 'play': 0.0},
    #  'Radiosporten Play': {'free': 0.0, 'play': 0.10769448286014331}}
    

    你以后打算用它做什么有点不清楚......但你应该自己弄清楚,对吧?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 2018-01-14
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多