Nasıl bir fonksiyon yazmalıyım?

“”"
question 3

A dictionary is given to you where the value corresponding
to each key is the key to another value. For example:
dict = {1:2, 2:3, 3:4, 4:5, 5:-1}
In dict, the value of key 1 is 2, which is the key in 2:3.
Key 2, has value 3, which is the key in 3:4. One of the keys
has value -1, that is the last key in the chain and it doesn’t
really point to another key-value pair. So in the above example
key 5 is the last item and it does not point to another key-value
pair.

Given such a dictionary, write a function that finds the first
item in the chain. The function must return the (key,value)
tuple for the first key in the chain. For the above example,
your function must return (1,2), because no other key has value 1.
“”"

def firstKey(dict):

“”"
question 4

A dictionary is given to you as described in Question 3.
Write a function that converts this dictionary to a list,
such that for every pair of consecutive items in the list,
there is a corresponding key-value pair in the dictionary.
For example, given the following dictionary:
{5:1, 2:5, 1:3, 7:-1, 3:7}
your function must return:
[2, 5, 1, 3, 7]
So, 2:5, 5:1, 1:3, 3:7 and 7:-1 are key-value pairs in
the dictionary.
“”"

def dictToList(dict):

Soruları anladınız mı?

Açıkçası tam ne istediğini anlayamadım

Sanırım ilkinde sözlükteki en küçük anahtar ve o anahtarın değerinden oluşan bir tuple istiyor.

İkincisinde de değeri -1 olan anahtarı bulup sürekli elimizdeki anahtarın değeri olduğu anahtarı bir listeye ekleyip bu listeyi ters çevirebiliriz. Yani -1’in değeri olduğu 7 anahtarını, sonra da 7’nin değeri olduğu 3 anahtarını, sonra da 3’ün değeri olduğu 1 anahtarını bir listeye ters sırayla ekleyerek [1, 3, 7] elde ediyoruz.

Yazabildiniz mi bir şeyler ?

Kod yazmadım ki, siz direkt kod mu istiyorsunuz?

Evet hocam, bir şeyler yazdım ama negatif değerde işe yaramıyor

import functools
import operator

def fix(f): return lambda *args: f(fix(f))(*args)

firstKey = lambda d: functools.reduce(operator.sub, map(set, zip(*d.items()))).pop()
dictToList = lambda d: fix(lambda f: lambda x: [] if x == -1 else [x] + f(d[x]))(firstKey(d))
3 Beğeni

Fonksiyonların isimlerini değiştirmeden yazmamız istenmiyor mu ? 2 soru için ayrı ayrı

Sizden isteniyor, benden degil. Ben istedigimi yazabilirim ^^

Sanırım ilk sorunun cevabı şöyle:

def firstKey(dictionary: dict):
    result = []
    for k, v in dictionary.items():
        for _k, _v in dictionary.items():
            if k == _v:
                return _k, _v

İkinci sorunun da cevabı sanırım şöyle:

def firstKey(dictionary: dict):
    result = []
    for k, v in dictionary.items():
        for _k, _v in dictionary.items():
            if k == _v:
                if _k not in result:
                    result.append(_k)
                if _v not in result:
                    result.append(_v)
    return result

Çok teşekkür ederimm

Sorunuzu niye sildiniz ki? Sorunun çözüldüğünü belirtmek istiyorsanız cevabı sağlayan gönderinin altındaki “çözüm” seçeneğine tıklamanız yeterli.