首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个键的2个字典的完全联接

使用多个键的2个字典的完全联接
EN

Stack Overflow用户
提问于 2019-02-20 00:03:23
回答 1查看 47关注 0票数 0

我正在尝试使用2个键将两个字典完全连接在一起。很容易将这些字典转换为pandas.df,然后加入它们,但是跳过熊猫做这件事是可能的吗?导入熊猫活动=pd.DataFrame.from_dict(活动)点击=pd.DataFrame.from_dict(点击)

代码语言:javascript
复制
campaigns.merge(hits, left_on=['ga:dimension2',"ga:dimension3"], right_on=['ga:dimension2',"ga:dimension3"],
                suffixes=('_left', '_right')).to_dict('records')

示例数据:

代码语言:javascript
复制
campaigns = [{u'ga:dimension3': u'1550492375954.8nnxmpdd', u'ga:dimension2': u'1501276805.1534759748', u'ga:source': u'(direct)', u'ga:medium': u'(none)', u'ga:hits': u'2', u'ga:keyword': u'(not set)', u'ga:campaign': u'(not set)', u'ga:adContent': u'(not set)'}, 
{u'ga:dimension3': u'1550500044503.6jpvmy2e', u'ga:dimension2': u'1817297896.1550500046', u'ga:source': u'r-bloggers.com', u'ga:medium': u'referral', u'ga:hits': u'2', u'ga:keyword': u'(not set)', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550527874491.84pg1lz', u'ga:dimension2': u'1848009400.1550527875', u'ga:source': u'r-bloggers.com', u'ga:medium': u'referral', u'ga:hits': u'3', u'ga:keyword': u'(not set)', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550499631285.9g1avnsc', u'ga:dimension2': u'189390412.1550499632', u'ga:source': u'r-bloggers.com', u'ga:medium': u'referral', u'ga:hits': u'4', u'ga:keyword': u'(not set)', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550500224440.t711ujn', u'ga:dimension2': u'189390412.1550499632', u'ga:source': u'r-bloggers.com', u'ga:medium': u'referral', u'ga:hits': u'21', u'ga:keyword': u'(not set)', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550465729892.i15lr464', u'ga:dimension2': u'1915099935.1550465730', u'ga:source': u'google', u'ga:medium': u'organic', u'ga:hits': u'2', u'ga:keyword': u'(not provided)', u'ga:campaign': u'(not set)', u'ga:adContent': u'(not set)'}, 
{u'ga:dimension3': u'1550499634190.gt8w9mi', u'ga:dimension2': u'2106610830.1550499634', u'ga:source': u'(direct)', u'ga:medium': u'(none)', u'ga:hits': u'2', u'ga:keyword': u'(not set)', u'ga:campaign': u'(not set)', u'ga:adContent': u'(not set)'}, 
{u'ga:dimension3': u'1550502969449.c9oge8og', u'ga:dimension2': u'282433453.1550502969', u'ga:source': u'r-bloggers.com', u'ga:medium': u'referral', u'ga:hits': u'4', u'ga:keyword': u'(not set)', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550479016552.y7otbq7s', u'ga:dimension2': u'false', u'ga:source': u'r-bloggers.com', u'ga:medium': u'referral', u'ga:hits': u'2', u'ga:keyword': u'(not set)', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550498136767.12cy6eqh', u'ga:dimension2': u'false', u'ga:source': u'r-bloggers.com', u'ga:medium': u'referral', u'ga:hits': u'6', u'ga:keyword': u'(not set)', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550518049930.ekbtg21t', u'ga:dimension2': u'false', u'ga:source': u'r-bloggers.com', u'ga:medium': u'referral', u'ga:hits': u'6', u'ga:keyword': u'(not set)', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550524951056.e0npeo37', u'ga:dimension2': u'false', u'ga:source': u'r-bloggers.com', u'ga:medium': u'referral', u'ga:hits': u'2', u'ga:keyword': u'(not set)', u'ga:campaign': u'blogpost', u'ga:adContent': u'pic'}]

hits = [{u'ga:hits': u'1', u'ga:dimension3': u'1550502969449.c9oge8og', u'ga:dimension2': u'282433453.1550502969', u'ga:dimension1': u'2019-02-18T08:16:09.449-07:00', u'ga:pagePath': u'/shiny/shinyggplot/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550479016552.y7otbq7s', u'ga:dimension2': u'false', u'ga:dimension1': u'2019-02-18T09:36:56.552+01:00', u'ga:pagePath': u'/shiny/shinyggplot/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550492375954.8nnxmpdd', u'ga:dimension2': u'1501276805.1534759748', u'ga:dimension1': u'2019-02-18T13:19:35.954+01:00', u'ga:pagePath': u'/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550498136767.12cy6eqh', u'ga:dimension2': u'false', u'ga:dimension1': u'2019-02-18T14:55:36.766+01:00', u'ga:pagePath': u'/shiny/shinyggplot/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550465729892.i15lr464', u'ga:dimension2': u'1915099935.1550465730', u'ga:dimension1': u'2019-02-18T15:55:29.891+11:00', u'ga:pagePath': u'/shiny/shinyggplot/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550527874491.84pg1lz', u'ga:dimension2': u'1848009400.1550527875', u'ga:dimension1': u'2019-02-18T17:11:14.490-05:00', u'ga:pagePath': u'/shiny/shinyggplot/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550518049930.ekbtg21t', u'ga:dimension2': u'false', u'ga:dimension1': u'2019-02-18T20:27:29.930+01:00', u'ga:pagePath': u'/shiny/shinyggplot/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550499631285.9g1avnsc', u'ga:dimension2': u'189390412.1550499632', u'ga:dimension1': u'2019-02-18T22:20:31.284+08:00', u'ga:pagePath': u'/shiny/shinyggplot/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550499631285.9g1avnsc', u'ga:dimension2': u'189390412.1550499632', u'ga:dimension1': u'2019-02-18T22:20:31.426+08:00', u'ga:pagePath': u'/shiny/shinyggplot/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550499634190.gt8w9mi', u'ga:dimension2': u'2106610830.1550499634', u'ga:dimension1': u'2019-02-18T22:20:34.189+08:00', u'ga:pagePath': u'/shiny/shinyggplot/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550500224440.t711ujn', u'ga:dimension2': u'189390412.1550499632', u'ga:dimension1': u'2019-02-18T22:22:11.668+08:00', u'ga:pagePath': u'/shiny/shinyggplot/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550524951056.e0npeo37', u'ga:dimension2': u'false', u'ga:dimension1': u'2019-02-18T22:22:31.54+01:00', u'ga:pagePath': u'/shiny/shinyggplot/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550500224440.t711ujn', u'ga:dimension2': u'189390412.1550499632', u'ga:dimension1': u'2019-02-18T22:26:01.219+08:00', u'ga:pagePath': u'/shiny/shinyggplot/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550500224440.t711ujn', u'ga:dimension2': u'189390412.1550499632', u'ga:dimension1': u'2019-02-18T22:27:20.303+08:00', u'ga:pagePath': u'/shiny/shinyggplot/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550500224440.t711ujn', u'ga:dimension2': u'189390412.1550499632', u'ga:dimension1': u'2019-02-18T22:27:24.351+08:00', u'ga:pagePath': u'/shiny/shinyggplot/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550500044503.6jpvmy2e', u'ga:dimension2': u'1817297896.1550500046', u'ga:dimension1': u'2019-02-18T22:27:24.502+08:00', u'ga:pagePath': u'/shiny/shinyggplot/'}, 
{u'ga:hits': u'1', u'ga:dimension3': u'1550500224440.t711ujn', u'ga:dimension2': u'189390412.1550499632', u'ga:dimension1': u'2019-02-18T22:30:24.440+08:00', u'ga:pagePath': u'/shiny/shinyggplot/'}]

预期输出:

代码语言:javascript
复制
[{u'ga:dimension3': u'1550492375954.8nnxmpdd', u'ga:dimension2': u'1501276805.1534759748', u'ga:dimension1': u'2019-02-18T13:19:35.954+01:00', u'ga:source': u'(direct)', 'ga:hits_right': u'1', u'ga:pagePath': u'/', u'ga:medium': u'(none)', u'ga:keyword': u'(not set)', 'ga:hits_left': u'2', u'ga:campaign': u'(not set)', u'ga:adContent': u'(not set)'}, 
{u'ga:dimension3': u'1550500044503.6jpvmy2e', u'ga:dimension2': u'1817297896.1550500046', u'ga:dimension1': u'2019-02-18T22:27:24.502+08:00', u'ga:source': u'r-bloggers.com', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'referral', u'ga:keyword': u'(not set)', 'ga:hits_left': u'2', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550527874491.84pg1lz', u'ga:dimension2': u'1848009400.1550527875', u'ga:dimension1': u'2019-02-18T17:11:14.490-05:00', u'ga:source': u'r-bloggers.com', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'referral', u'ga:keyword': u'(not set)', 'ga:hits_left': u'3', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550499631285.9g1avnsc', u'ga:dimension2': u'189390412.1550499632', u'ga:dimension1': u'2019-02-18T22:20:31.284+08:00', u'ga:source': u'r-bloggers.com', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'referral', u'ga:keyword': u'(not set)', 'ga:hits_left': u'4', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550499631285.9g1avnsc', u'ga:dimension2': u'189390412.1550499632', u'ga:dimension1': u'2019-02-18T22:20:31.426+08:00', u'ga:source': u'r-bloggers.com', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'referral', u'ga:keyword': u'(not set)', 'ga:hits_left': u'4', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550500224440.t711ujn', u'ga:dimension2': u'189390412.1550499632', u'ga:dimension1': u'2019-02-18T22:22:11.668+08:00', u'ga:source': u'r-bloggers.com', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'referral', u'ga:keyword': u'(not set)', 'ga:hits_left': u'21', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550500224440.t711ujn', u'ga:dimension2': u'189390412.1550499632', u'ga:dimension1': u'2019-02-18T22:26:01.219+08:00', u'ga:source': u'r-bloggers.com', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'referral', u'ga:keyword': u'(not set)', 'ga:hits_left': u'21', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550500224440.t711ujn', u'ga:dimension2': u'189390412.1550499632', u'ga:dimension1': u'2019-02-18T22:27:20.303+08:00', u'ga:source': u'r-bloggers.com', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'referral', u'ga:keyword': u'(not set)', 'ga:hits_left': u'21', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550500224440.t711ujn', u'ga:dimension2': u'189390412.1550499632', u'ga:dimension1': u'2019-02-18T22:27:24.351+08:00', u'ga:source': u'r-bloggers.com', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'referral', u'ga:keyword': u'(not set)', 'ga:hits_left': u'21', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550500224440.t711ujn', u'ga:dimension2': u'189390412.1550499632', u'ga:dimension1': u'2019-02-18T22:30:24.440+08:00', u'ga:source': u'r-bloggers.com', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'referral', u'ga:keyword': u'(not set)', 'ga:hits_left': u'21', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550465729892.i15lr464', u'ga:dimension2': u'1915099935.1550465730', u'ga:dimension1': u'2019-02-18T15:55:29.891+11:00', u'ga:source': u'google', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'organic', u'ga:keyword': u'(not provided)', 'ga:hits_left': u'2', u'ga:campaign': u'(not set)', u'ga:adContent': u'(not set)'}, 
{u'ga:dimension3': u'1550499634190.gt8w9mi', u'ga:dimension2': u'2106610830.1550499634', u'ga:dimension1': u'2019-02-18T22:20:34.189+08:00', u'ga:source': u'(direct)', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'(none)', u'ga:keyword': u'(not set)', 'ga:hits_left': u'2', u'ga:campaign': u'(not set)', u'ga:adContent': u'(not set)'}, 
{u'ga:dimension3': u'1550502969449.c9oge8og', u'ga:dimension2': u'282433453.1550502969', u'ga:dimension1': u'2019-02-18T08:16:09.449-07:00', u'ga:source': u'r-bloggers.com', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'referral', u'ga:keyword': u'(not set)', 'ga:hits_left': u'4', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550479016552.y7otbq7s', u'ga:dimension2': u'false', u'ga:dimension1': u'2019-02-18T09:36:56.552+01:00', u'ga:source': u'r-bloggers.com', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'referral', u'ga:keyword': u'(not set)', 'ga:hits_left': u'2', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550498136767.12cy6eqh', u'ga:dimension2': u'false', u'ga:dimension1': u'2019-02-18T14:55:36.766+01:00', u'ga:source': u'r-bloggers.com', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'referral', u'ga:keyword': u'(not set)', 'ga:hits_left': u'6', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550518049930.ekbtg21t', u'ga:dimension2': u'false', u'ga:dimension1': u'2019-02-18T20:27:29.930+01:00', u'ga:source': u'r-bloggers.com', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'referral', u'ga:keyword': u'(not set)', 'ga:hits_left': u'6', u'ga:campaign': u'blogpost', u'ga:adContent': u'text'}, 
{u'ga:dimension3': u'1550524951056.e0npeo37', u'ga:dimension2': u'false', u'ga:dimension1': u'2019-02-18T22:22:31.54+01:00', u'ga:source': u'r-bloggers.com', 'ga:hits_right': u'1', u'ga:pagePath': u'/shiny/shinyggplot/', u'ga:medium': u'referral', u'ga:keyword': u'(not set)', 'ga:hits_left': u'2', u'ga:campaign': u'blogpost', u'ga:adContent': u'pic'}]
EN

回答 1

Stack Overflow用户

发布于 2019-02-20 00:58:42

我会试一试的。希望我能很好地理解,但如果在两个字典中对应于多个键的值是相等的,那么您希望合并多个键。

代码语言:javascript
复制
l1 = [
    {'a': 'not', 'b': 'sth', 'c':'good'}, 
    {'a': 'sth', 'b': 'nice', 'c': 'here'}
]
l2 = [{'a': 'sth', 'b': 'nice', 'd': 'sth else'}]

def value_gen(source, list_of_keys):
    for x in source:
        if not set(list_of_keys) - set(x):
            # Yield only what return the empty set 
            # i.e. that dict which has that list of keys
            yield x

def merge_by_keys(source1, source2, list_of_keys):
    results = []
    for x in value_gen(source1, list_of_keys):
        x_vals = [x[key] for key in list_of_keys]
        for y in value_gen(source2, list_of_keys):
            # At this point we're sure both x and y have 
            # valid signatures. We now check if the values
            # at those keys are equal.
            y_vals = [y[key] for key in list_of_keys]
            if x_vals == y_vals:
                # Fancy trick for creating a new dict 
                # which is the union of keys
                results.append({**x, **y})
    return results

merge_by_keys(l1, l2, ['a', 'b'])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54770402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档