Hướng dẫn map two dictionaries python - ánh xạ hai từ điển python

Bạn có thể sử dụng một từ điển mới trong đó các phím là tuple và ánh xạ nó theo các cột có khóa kéo.

d = {**{[1, k]: v for k, v in d1.items[]}, **{[2, k]: v for k, v in d2.items[]}}
df.assign[ColB=[*map[d.get, zip[df.ColA, df.ColB]]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d

Hoặc chúng ta có thể dễ thương với Lambda để lập bản đồ. Trong trường hợp này, nó không quan trọng ở vị trí đầu tiên. Tôi đặt 0 tùy ý.
NOTE: I aligned the dictionaries to switch between based on their relative position in the list [0, d1, d2]. In this case it doesn't matter what is in the first position. I put 0 arbitrarily.

df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d

Vì sự mạnh mẽ, tôi sẽ tránh xa dễ thương và lập bản đồ một lambda có khả năng giá trị mặc định

df.assign[ColB=[*map[lambda x, y: {1: d1, 2: d2}.get[x, {}].get[y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d

Phương pháp số 2: Sử dụng danh sách hiểu + từ điển hiểu

Đầu vào: test_dict1 = {Hồi gfg, [4, 10], tốt nhất: [8, 6], Hồi là Hồi: [9, 3]}, test_dict2 = {6: [15, 9], 8: [[ 6, 3], 7: [9, 8], 9: [10, 11]} Đầu ra: {'Best': [6, 3, 15, 9], 'là': [10, 11]} Giải thích: Càng tốt nhất có 8 và 6, được ánh xạ tới 6, 3 và 15, 9 do đó đầu ra cho khóa đó. Đầu vào: test_dict1 = {Hồi gfg, [4, 10], tốt nhất: [18, 16], Hồi là Hồi: [9, 3]}, test_dict2 = {6: [15, 9], 8: [[ 6, 3], 7: [9, 8], 9: [10, 11]} Đầu ra: {'là': [10, 11]} Giải thích: Chỉ 9 hiện tại là khóa có thể. : test_dict1 = {“Gfg” : [4, 10], “Best” : [8, 6], “is” : [9, 3]}, test_dict2 = {6 : [15, 9], 8 : [6, 3], 7 : [9, 8], 9 : [10, 11]} Output : {‘Best’: [6, 3, 15, 9], ‘is’: [10, 11]} Explanation : “Best” has 8 and 6, which are mapped to 6, 3 and 15, 9 hence output for that key. Input : test_dict1 = {“Gfg” : [4, 10], “Best” : [18, 16], “is” : [9, 3]}, test_dict2 = {6 : [15, 9], 8 : [6, 3], 7 : [9, 8], 9 : [10, 11]} Output : {‘is’: [10, 11]} Explanation : Only 9 present as possible key.

Phương thức số 1: Sử dụng loop + setDefault [] + extend []

Sự kết hợp của các chức năng trên có thể được sử dụng để giải quyết vấn đề này. Trong đó, chúng tôi thực hiện nhiệm vụ nhận các khóa phù hợp với các giá trị bằng cách sử dụng get [] và setDefault được sử dụng để xây dựng danh sách trống để ánh xạ.

Python3

test_dict1 =

df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
0
df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
1
df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
2
df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
3__

df.assign[ColB=[*map[lambda x, y: {1: d1, 2: d2}.get[x, {}].get[y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
9=
df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
0
df.assign[ColB=[*map[lambda x, y: {1: d1, 2: d2}.get[x, {}].get[y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
1
df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
2
The original dictionary 1 is : {'Gfg': [4, 7], 'Best': [8, 6], 'is': [9, 3]}
The original dictionary 2 is : {6: [15, 9], 8: [6, 3], 7: [9, 8], 9: [10, 11]}
The constructed dictionary : {'Gfg': [9, 8], 'Best': [6, 3, 15, 9], 'is': [10, 11]}
4__

tuple6tuple7tuple8 tuple9 [0, d1, d2]0[0, d1, d2]1

tuple6tuple7[0, d1, d2]4 tuple9 [0, d1, d2]0[0, d1, d2]7

[0, d1, d2]8= 00

01 0203 04

0501 077____73 09

test_dict1 0test_dict1 1

tuple6tuple7test_dict1 4 tuple9 [0, d1, d2]0test_dict1 7

Đầu ra

The original dictionary 1 is : {'Gfg': [4, 7], 'Best': [8, 6], 'is': [9, 3]}
The original dictionary 2 is : {6: [15, 9], 8: [6, 3], 7: [9, 8], 9: [10, 11]}
The constructed dictionary : {'Gfg': [9, 8], 'Best': [6, 3, 15, 9], 'is': [10, 11]}

Phương pháp số 2: Sử dụng danh sách hiểu + từ điển hiểu

Đây là một cách nữa trong đó vấn đề này có thể được giải quyết. Trong đó, chúng tôi trích xuất tất cả các ánh xạ bằng cách sử dụng danh sách hiểu và sau đó xây dựng từ điển mới bằng cách lập bản đồ chéo các giá trị được trích xuất.

Python3

test_dict1 =

df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
0
df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
1
df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
2
df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
3__

df.assign[ColB=[*map[lambda x, y: {1: d1, 2: d2}.get[x, {}].get[y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
9=
df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
0
df.assign[ColB=[*map[lambda x, y: {1: d1, 2: d2}.get[x, {}].get[y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
1
df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]

   ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d
2
The original dictionary 1 is : {'Gfg': [4, 7], 'Best': [8, 6], 'is': [9, 3]}
The original dictionary 2 is : {6: [15, 9], 8: [6, 3], 7: [9, 8], 9: [10, 11]}
The constructed dictionary : {'Gfg': [9, 8], 'Best': [6, 3, 15, 9], 'is': [10, 11]}
4__

tuple6tuple7tuple8 tuple9 [0, d1, d2]0[0, d1, d2]1

tuple6tuple7[0, d1, d2]4 tuple9 [0, d1, d2]0[0, d1, d2]7

[0, d1, d2]8= 00

01 0203 04

tuple6tuple7test_dict1 4 tuple9 [0, d1, d2]0test_dict1 7

Đầu ra

The original dictionary 1 is : {'Gfg': [4, 7], 'Best': [8, 6], 'is': [9, 3]}
The original dictionary 2 is : {6: [15, 9], 8: [6, 3], 7: [9, 8], 9: [10, 11]}
The constructed dictionary : {'Gfg': [9, 8], 'Best': [6, 3, 15, 9], 'is': [10, 11]}


Bài Viết Liên Quan

Chủ Đề