我正在尝试使用2个键将两个字典完全连接在一起。很容易将这些字典转换为pandas.df,然后加入它们,但是跳过熊猫做这件事是可能的吗?导入熊猫活动=pd.DataFrame.from_dict(活动)点击=pd.DataFrame.from_dict(点击)
campaigns.merge(hits, left_on=['ga:dimension2',"ga:dimension3"], right_on=['ga:dimension2',"ga:dimension3"],
suffixes=('_left', '_right')).to_dict('records')示例数据:
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/'}]预期输出:
[{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'}]发布于 2019-02-20 00:58:42
我会试一试的。希望我能很好地理解,但如果在两个字典中对应于多个键的值是相等的,那么您希望合并多个键。
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'])https://stackoverflow.com/questions/54770402
复制相似问题